Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak używać jeśli istnieje - jeśli nie istnieje w PL/SQL?

Twój kod jest w większości dobry, ale musiałbyś go zmodyfikować w ten sposób:

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;      

lub tak:

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;      

Pierwsza opcja to użycie poprawnej pisowni Oracle do tworzenia ciągów i dynamicznego SQL, a druga opcja to całkowite uniknięcie dynamicznego SQL poprzez wykonanie INSERT na miejscu (opcja, którą preferuję).

EDYTUJ: Wystąpił błąd, ponieważ nie zahermetyzowałeś INSERT wewnątrz sznurka. To właśnie zmieniłem dla ciebie w mojej pierwszej opcji, kiedy wspomniałem o correct Oracle spelling for string creations and dynamic SQL .

Mam nadzieję, że pomogłem!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Plus (+) przyłącza do konwersji ANSI

  2. Oracle SQL:zapytanie SQL generujące 4 razy więcej wyników, a dane nie zostaną poprawnie uporządkowane

  3. Sekwencja specyficzna dla jednostki

  4. Jak wywołać funkcję tabelową Oracle (funkcja potokowa) z .NET?

  5. SQL:Jak znaleźć duplikaty na podstawie dwóch pól?