sql >> Database >  >> RDS >> Oracle

Hoe te gebruiken als bestaat - zo niet bestaat in PL/SQL?

Uw code is meestal goed, maar u zou deze als volgt moeten wijzigen:

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;      

of zoals dit:

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;      

De eerste optie is het gebruik van de juiste Oracle-spelling voor het maken van strings en dynamische SQL en de tweede optie is om dynamische SQL helemaal te vermijden door INSERT uit te voeren. ter plaatse (de optie die ik verkies).

BEWERK: De fout die je kreeg was omdat je je INSERT . niet hebt ingekapseld binnen een koord. Dat is wat ik voor je heb veranderd in mijn eerste optie toen ik correct Oracle spelling for string creations and dynamic SQL .

Ik hoop dat ik heb geholpen!



  1. Sla tabellen over in mysqldump op basis van een patroon

  2. Hoe gegevens in MySQL in te voegen met een automatisch verhoogde primaire sleutel?

  3. PostgreSQL, kan rij niet bijwerken (met beveiliging op rijniveau)

  4. SUM(NULL) begrijpen in MySQL