sql >> Databasteknik >  >> RDS >> Oracle

Hur använder man om det finns - om det inte finns i PL/SQL?

Din kod är för det mesta bra, men du måste ändra den antingen så här:

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;      

eller så här:

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;      

Det första alternativet är att använda korrekt Oracle-stavning för att skapa strängar och dynamisk SQL och det andra alternativet är att undvika dynamisk SQL helt och hållet genom att köra INSERT på plats (alternativet jag föredrar).

REDIGERA: Felet du fick berodde på att du inte kapslade in din INSERT inuti ett snöre. Det är vad jag ändrade för dig i mitt första alternativ när jag nämnde correct Oracle spelling for string creations and dynamic SQL .

Jag hoppas att jag hjälpte till!



  1. Hur man infogar poster från tabell till en annan utan dubbletter

  2. Hur kör man genererad SQL från en variabel?

  3. System.Data.SqlClient Namespace för MySQL?

  4. Fel vid exekvering av ODCIEXTTABLEOPEN-utlysningen