Ich hab das eins zu eins übernommen, und ein paar fehlermeldungen, kann das aber nicht wirklich finden:
create or replace Function f_checktables(slotName in varchar2)
return PLS_INTEGER
as
l_count integer;
l_first_column varchar(128);
l_column_name varchar(128);
l_sequence_name varchar(128);
begin
-- teste ob es wenigstens eine Spalte mit WID endet
SELECT count(*)
INTO l_count
FROM USER_TAB_COLS
WHERE TABLE_NAME = upper(slotname)
AND column_name = l_column;
-- Keine Spalte mit _WID am Ende vorhanden - hole den Namen der ersten Spalte der Tabelle.
IF l_count = 0 THEN
SELECT column_name
INTO l_column
FROM USER_TAB_COLS
WHERE TABLE_NAME = upper(slotname)
ORDER BY column_id --<< nach der Reihenfolge sortieren
FETCH FIRST 1 ROWS ONLY; --<< nur eine Zeile zurückgeben
-- neuen Namen erzeugen
l_column_name := l_column ||'_WID';
-- und Spalte hinzufügen.
EXECUTE IMMEDIATE 'ALTER TABLE '||slotname||' ADD COLUMN '||l_column||' VARCHAR2(100)';
END IF;
-- keine Ahnung ob ich das richtig verstanden habe.
l_sequence_name := 'BI_ADMIN_||l_column_name;
SELECT count(*)
INTO l_count
FROM user_sequences
WHERE sequence_name = l_sequence_name;
/*IF l_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE SEQUENCE '||l_sequence_name;
END IF;*/
RETURN 1;
end;
/
fehlermeldung:
19/9 PL/SQL: SQL Statement ignored
24/9 PL/SQL: ORA-00933: SQL-Befehl wurde nicht korrekt beendet
42/28 PLS-00103: Fand das Symbol "CREATE" als eines der folgenden erwartet wurde: * & = - + ; < / > at in is mod remainder not rem <an exponent (**)> <> or != or ~= >= <= <> and or like like2 like4 likec between || multiset member submultiset
Fehler: Compilerlog prüfen
Ich hatte Create auch schon auskommentiert und in dem 2. select fehlt der From Teil, ich fidne den Fehler nicht
create or replace Function f_checktables(slotName in varchar2)
return PLS_INTEGER
as
l_count integer;
l_first_column varchar(128);
l_column_name varchar(128);
l_sequence_name varchar(128);
begin
-- teste ob es wenigstens eine Spalte mit WID endet
SELECT count(*)
INTO l_count
FROM USER_TAB_COLS
WHERE TABLE_NAME = upper(slotname)
AND column_name = l_column;
-- Keine Spalte mit _WID am Ende vorhanden - hole den Namen der ersten Spalte der Tabelle.
IF l_count = 0 THEN
SELECT column_name
INTO l_column
FROM USER_TAB_COLS
WHERE TABLE_NAME = upper(slotname)
ORDER BY column_id --<< nach der Reihenfolge sortieren
FETCH FIRST 1 ROWS ONLY; --<< nur eine Zeile zurückgeben
-- neuen Namen erzeugen
l_column_name := l_column ||'_WID';
-- und Spalte hinzufügen.
EXECUTE IMMEDIATE 'ALTER TABLE '||slotname||' ADD COLUMN '||l_column||' VARCHAR2(100)';
END IF;
-- keine Ahnung ob ich das richtig verstanden habe.
l_sequence_name := 'BI_ADMIN_||l_column_name;
SELECT count(*)
INTO l_count
FROM user_sequences
WHERE sequence_name = l_sequence_name;
/*IF l_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE SEQUENCE '||l_sequence_name;
END IF;*/
RETURN 1;
end;
/
fehlermeldung:
19/9 PL/SQL: SQL Statement ignored
24/9 PL/SQL: ORA-00933: SQL-Befehl wurde nicht korrekt beendet
42/28 PLS-00103: Fand das Symbol "CREATE" als eines der folgenden erwartet wurde: * & = - + ; < / > at in is mod remainder not rem <an exponent (**)> <> or != or ~= >= <= <> and or like like2 like4 likec between || multiset member submultiset
Fehler: Compilerlog prüfen
Ich hatte Create auch schon auskommentiert und in dem 2. select fehlt der From Teil, ich fidne den Fehler nicht