sql >> Databasteknik >  >> RDS >> Oracle

Infoga om det inte finns Oracle

Kommer sent till festen, men...

Med Oracle 11.2.0.1 finns en semantisk ledtråd som kan göra detta:IGNORE_ROW_ON_DUPKEY_INDEX

Exempel:

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

UPPDATERA :Även om det här tipset fungerar (om du stavar det rätt) finns det bättre tillvägagångssätt som inte kräver Oracle 11R2:

Första tillvägagångssättet – direkt översättning av ovanstående semantiska tips:

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

Andra tillvägagångssätt—en mycket snabbare än båda tipsen ovan när det är mycket tvist:

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. Hur får man antalet rader i MySQL-tabellen med PHP?

  2. Hur man skapar Not Null-begränsning på kolumn i SQL Server-tabell - SQL Server / T-SQL självstudie del 51

  3. Varför använda join istället för var i MySQL-frågor?

  4. Hur ändrar man ägandet av alla objekt i ett visst schema i PostgreSQL?