sql >> Databáze >  >> RDS >> Oracle

Jak použít if existuje-pokud neexistuje v PL/SQL?

Váš kód je většinou dobrý, ale museli byste ho upravit buď takto:

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;      

nebo takto:

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;      

První možností je použití správného pravopisu Oracle pro vytváření řetězců a dynamické SQL a druhou možností je zcela se vyhnout dynamickému SQL spuštěním INSERT na místě (možnost, kterou preferuji).

UPRAVIT: Došlo k chybě, protože jste nezapouzdřili svůj INSERT uvnitř provázku. To je to, co jsem pro vás změnil ve své první možnosti, když jsem zmínil correct Oracle spelling for string creations and dynamic SQL .

Doufám, že jsem pomohl!



  1. Nejlepší postup pro identifikaci jsonb null v plpgsql

  2. MySQL - Odstranit hodnotu v řádku namísto smazání řádku

  3. Vytvoření spouštěče s příkazem case

  4. Ukládání speciálních znaků do DB takovým způsobem, aby se správně zobrazily na webu a přesto našel obrázek se stejným názvem