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

Wstaw, jeśli nie istnieje Oracle

Spóźnię się na imprezę, ale...

W Oracle 11.2.0.1 istnieje podpowiedź semantyczna które mogą to zrobić:IGNORE_ROW_ON_DUPKEY_INDEX

Przykład:

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

AKTUALIZUJ :Chociaż ta wskazówka działa (jeśli przeliterujesz ją poprawnie), istnieją lepsze podejścia, które nie wymagają Oracle 11R2:

Pierwsze podejście — bezpośrednie tłumaczenie powyższej podpowiedzi semantycznej:

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

Drugie podejście — dużo szybciej niż obie powyższe wskazówki, gdy jest dużo niezgody:

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. Jak wyeksportować tabelę do pliku CSV za pomocą Oracle SQL Developer?

  2. Wydano SQL Developer 4.0

  3. Błąd wyzwalacza Oracle ORA-04091

  4. Oracle, jak wyeksportować zapytanie do pliku tekstowego/csv

  5. Zależności klienta Oracle.DataAccess