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

Masukkan jika tidak ada Oracle

Datang terlambat ke pesta, tapi...

Dengan Oracle 11.2.0.1 ada petunjuk semantik yang dapat melakukan ini:IGNORE_ROW_ON_DUPKEY_INDEX

Contoh:

insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(customer_orders,pk_customer_orders) */
  into customer_orders
       (order_id, customer, product)
values (    1234,     9876,  'K598')
     ;

PERBARUI :Meskipun petunjuk ini berfungsi (jika Anda mengejanya dengan benar), ada pendekatan yang lebih baik yang tidak memerlukan Oracle 11R2:

Pendekatan pertama—terjemahan langsung dari petunjuk semantik di atas:

begin
  insert into customer_orders
         (order_id, customer, product)
  values (    1234,     9876,  'K698')
  ;
  commit;
exception
  when DUP_VAL_ON_INDEX
  then ROLLBACK;
end;

Pendekatan kedua—banyak lebih cepat dari kedua petunjuk di atas ketika ada banyak pertengkaran:

begin
    select count (*)
    into   l_is_matching_row
    from   customer_orders
    where  order_id = 1234
    ;

    if (l_is_matching_row = 0)
    then
      insert into customer_orders
             (order_id, customer, product)
      values (    1234,     9876,  'K698')
      ;
      commit;
    end if;
exception
  when DUP_VAL_ON_INDEX
  then ROLLBACK;
end;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lewati Kontrol Ke Baris Tertentu Menggunakan Perintah Label Goto Di PLSQL

  2. Kesalahan login Sqlplus saat menggunakan variabel bash:SP2-0306:Opsi tidak valid

  3. UID – Kembalikan ID Sesi Saat Ini di Oracle

  4. Loop Bersarang Bergabung di Oracle 11g

  5. Fungsi MySQL COALESCE dan NULLIF