Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara menggunakan jika ada- jika tidak ada di PL/SQL?

Kode Anda sebagian besar bagus, tetapi Anda harus memodifikasinya seperti ini:

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;      

atau seperti ini:

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;      

Opsi pertama adalah menggunakan ejaan Oracle yang benar untuk pembuatan string dan SQL dinamis dan opsi kedua adalah menghindari SQL dinamis sama sekali dengan menjalankan INSERT di tempat (opsi yang saya sukai).

EDIT : Kesalahan yang Anda dapatkan adalah karena Anda tidak merangkum INSERT . Anda di dalam sebuah string. Itulah yang saya ubah untuk Anda di opsi pertama saya ketika saya menyebutkan correct Oracle spelling for string creations and dynamic SQL .

Saya harap saya membantu!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nilai n teratas yang berbeda dari satu kolom di Oracle

  2. Cara mematikan semua sesi Oracle aktif dan tidak aktif untuk pengguna

  3. Pivot Oracle dengan subquery

  4. Buka kursor untuk nama tabel dinamis dalam prosedur PL/SQL

  5. Hapus tag Kosong dari oracle xmltype