Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie verwendet man ifexists- if notexists in PL/SQL?

Ihr Code ist meistens gut, aber Sie müssten ihn entweder so ändern:

DECLARE
l_count NUMBER;
l_count_2 NUMBER;
BEGIN
select count(*) into l_count from table_1 where name='NAME_1';
IF l_count = 0  then
    BEGIN 
        select count(*) into l_count_2 FROM dba_tab_cols  WHERE TABLE_NAME = 'table_1' AND COLUMN_NAME='NAME_2';

        IF l_count_2 > 0 THEN        
          sql_cnt :=  'INSERT INTO table_1 (xycolumn1, xycolumn2, xycolumn3) VALUES (''value1'', ''select max(column) from table_2'', ''20'')';          
        ELSE             
           sql_cnt := 'INSERT INTO table_1 (xycolumn1, xycolumn2) VALUES (''value1'', ''select max(column) from table_2'')';
        END IF;                    
       BEGIN
         EXECUTE IMMEDIATE sql_cnt ;
       END;
    END;
END IF;       
END;      

oder so:

DECLARE
l_count NUMBER;
l_count_2 NUMBER;
BEGIN
select count(*) into l_count from table_1 where name='NAME_1';
IF l_count = 0  then
    BEGIN 
        select count(*) into l_count_2 FROM dba_tab_cols  WHERE TABLE_NAME = 'table_1' AND COLUMN_NAME='NAME_2';

        IF l_count_2 > 0 THEN        
          INSERT INTO table_1 (xycolumn1, xycolumn2, xycolumn3) VALUES ('value1', 'select max(column) from table_2', '20' );          
        ELSE             
          INSERT INTO table_1 (xycolumn1, xycolumn2) VALUES ('value1', 'select max(column) from table_2');
        END IF;   
    END;
END IF;       
END;      

Die erste Option ist die Verwendung der korrekten Oracle-Schreibweise für String-Erzeugungen und dynamisches SQL und die zweite Option ist das vollständige Vermeiden von dynamischem SQL durch Ausführen von INSERT vor Ort (die Option, die ich bevorzuge).

BEARBEITEN : Der Fehler, den Sie erhalten haben, war, weil Sie Ihren INSERT nicht gekapselt haben innerhalb einer Zeichenfolge. Das habe ich in meiner ersten Option für Sie geändert, als ich correct Oracle spelling for string creations and dynamic SQL erwähnte .

Ich hoffe, ich konnte helfen!