sql >> データベース >  >> RDS >> Oracle

Oracleが存在しない場合は挿入

    パーティーに遅れて来るが...

    oracle 11.2.0.1には、セマンティックヒントがあります。 これを行うことができます: IGNORE_ROW_ON_DUPKEY_INDEX

    例:

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

    更新 :このヒントは機能しますが(正しく綴れば)、Oracle11R2を必要としないより良いアプローチがあります:

    最初のアプローチ-上記のセマンティックヒントの直接翻訳:

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

    2番目のアプローチ-ロット 競合が多い場合は、上記の両方のヒントよりも高速です:

    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. カスタムダイアログでデータを更新する方法

    2. SQL Server(T-SQL)でユーザーのデフォルトのデータベースメールプロファイルを変更する方法

    3. ORA-00838

    4. SQLサーバーはwhere式の大文字小文字を無視します