Case?

Babsi

SQL-Guru
Beiträge
122
Hallo,

ich versuche mit case in einer Fkt. abzufragen, ob eine Spalte vorhanden ist.
Das versuch ich wie folgt:

cursor c_columnName is
select column_name
FROM USER_TAB_COLS
WHERE TABLE_NAME = upper(slotname)
AND column_name LIKE 'REC_%';

aber ich weiß jetzt nicht genau, wie ich diesen curser abfragen soll, ich versuchs so..

else-- Hier mit case prüfen??

case (c_columnName)
when c_columnName <> 'REC_ATBMAN_WID ' then
EXECUTE IMMEDIATE 'ALTER TABLE '||Upper(slotname)||' ADD '||'REC_ATBMAN_WID'||' VARCHAR2(252)';
when c_columnName <> REC_ATBSRC_WID then
EXECUTE IMMEDIATE 'ALTER TABLE '||Upper(slotname)||' ADD '||'REC_ATBSRC_WID'||' VARCHAR2(252)';
when c_columnName <>REC_CREATED_BY then
EXECUTE IMMEDIATE 'ALTER TABLE '||Upper(slotname)||' ADD '||'REC_CREATED_BY'||' VARCHAR2(252)';
when c_columnName <>REC_CREATED_DT then
EXECUTE IMMEDIATE 'ALTER TABLE '||Upper(slotname)||' ADD '||'REC_CREATED_DT'||' VARCHAR2(252)';
when c_columnName <>REC_UPDATED_BY then
EXECUTE IMMEDIATE 'ALTER TABLE '||Upper(slotname)||' ADD '||'REC_UPDATED_BY'||' VARCHAR2(252)';
when c_columnName <>REC_UPDATED_DT then
EXECUTE IMMEDIATE 'ALTER TABLE '||Upper(slotname)||' ADD '||'REC_UPDATED_DT'||' VARCHAR2(252)';
else
return 0;
end case;

hat jemand einen Tip für mich?


 
Werbung:
hallo,
habs hinbekommen, sol läuft es erst mal, bestimmt nicht sehr performant aber...

create or replace Function f_CheckPrefix(slotname varchar2)
return PLS_integer

as
myRecord varchar2(500);
v_countRec pls_integer;
v_countInt pls_integer;

-- Recordset hilft hier nicht weiter, ich brauch ja den Spaltennamen!!!

cursor c_columnName is
select column_name
FROM USER_TAB_COLS
WHERE TABLE_NAME = upper(slotname);

PRAGMA AUTONOMOUS_TRANSACTION;

begin

SELECT count(*)
INTO v_countRec
FROM USER_TAB_COLS
WHERE TABLE_NAME = upper(slotname)
and column_name LIKE 'REC_%' ;

SELECT count(*)
INTO v_countInt
FROM USER_TAB_COLS
WHERE TABLE_NAME = upper(slotname)
and column_name LIKE 'INTEGRATION_ID' ;
-- mit case vielelicht die anzahl der Spalten für rec???


if v_countInt= 0 or v_countInt= 1 or v_countRec =0 or v_countRec <=4 then

if v_countInt= 0 then
-- Spalte erstellen
EXECUTE IMMEDIATE 'ALTER TABLE '||Upper(slotname)||' ADD '||'INTEGRATION_ID'||' VARCHAR2(252)';
-- Wenn die Anzahl der Rec-Spalten kleiner 4
if v_countRec = 0 or v_countRec <=4 then
-- Cursor öffnen
open c_columnName;
-- Inhalte in Variable speichern
fetch c_columnName into myRecord;
-- variable asuwerten / Abfragen
if myRecord <> 'REC_ATBMAN_WID' then
EXECUTE IMMEDIATE 'ALTER TABLE '||Upper(slotname)||' ADD '||'REC_ATBMAN_WID'||' VARCHAR2(252)';
end if;
if myRecord <> 'REC_ATBSRC_WID' then
EXECUTE IMMEDIATE 'ALTER TABLE '||Upper(slotname)||' ADD '||'REC_ATBSRC_WID'||' VARCHAR2(252)';
end if;
if myRecord <>'REC_CREATED_BY' then
EXECUTE IMMEDIATE 'ALTER TABLE '||Upper(slotname)||' ADD '||'REC_CREATED_BY'||' VARCHAR2(252)';
end if;
if myRecord <>'REC_CREATED_DT' then
EXECUTE IMMEDIATE 'ALTER TABLE '||Upper(slotname)||' ADD '||'REC_CREATED_DT'||' VARCHAR2(252)';
if myRecord <>'REC_UPDATED_BY' then
EXECUTE IMMEDIATE 'ALTER TABLE '||Upper(slotname)||' ADD '||'REC_UPDATED_BY'||' VARCHAR2(252)';
end if;
if myRecord <>'REC_UPDATED_DT' then
EXECUTE IMMEDIATE 'ALTER TABLE '||Upper(slotname)||' ADD '||'REC_UPDATED_DT'||' VARCHAR2(252)';
end if;
end if;
return 3;
end if;
end if;
return 2;
else
return 1;
end if;
Close c_columnName;


end;
/
 
Zurück
Oben