Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да използвам ако съществува - ако не съществува в PL/SQL?

Вашият код е най-вече добър, но ще трябва да го промените по този начин:

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;      

или така:

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;      

Първата опция е използването на правилния правопис на Oracle за създаване на низове и динамичен SQL, а втората опция избягва напълно динамичния SQL чрез изпълнение на INSERT на място (предпочитаният от мен вариант).

РЕДАКТИРАНЕ: Грешката, която получихте, беше, защото не сте капсулирали своя INSERT вътре в низ. Това е, което промених за вас в моята първа опция, когато споменах correct Oracle spelling for string creations and dynamic SQL .

Надявам се, че помогнах!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Получаване на грешка ORA-00909:невалиден брой аргументи

  2. Oracle SQL как да премахнете времето от датата

  3. Entity Framework не може да актуализира данни в таблица със съставен ключ (Oracle)

  4. Проблем с производителността при актуализиране на таблица от друга таблица

  5. Именувана заявка, собствена заявка или API за критерии