1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Case?

Dieses Thema im Forum "Oracle" wurde erstellt von Babsi, 9 Juli 2019.

  1. Babsi

    Babsi Fleissiger Benutzer

    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?


     
  2. Babsi

    Babsi Fleissiger Benutzer

    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;
    /
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden