Da waren ein paar Tippfehler drin.
[code]
create or replace function f_checktables(slotName in varchar2)
return PLS_INTEGER
as
l_count integer;
l_first_column varchar(128);
l_column varchar(128); --<< hat gefehlt
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 LIKE '%_WID';
-- 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 --<< hat gefehlt
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; --<< hier hat ein ' gefehlt
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;
/
[/code]