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

Oracle:自動インクリメントトリガー。

    さて、私は何が起こっているのか理解できたと思います。あなたの質問への答えは絶対に大規模なはいです 。このトリガーを無効にすると、大きな影響が出る可能性があります。

    このトリガーが存在するように見える理由は、主キー値がではない状況に対処するためです。 テーブルへの挿入で提供されます。これが発生した場合どこでも コード内でトリガーを削除すると、それらの挿入が壊れます。

    2つのことをしなければなりません。

    1. トリガーを修正してください。明らかに壊れています。修正する:

      CREATE OR REPLACE TRIGGER  BI_PRIVILEGE
        before insert on PRIVILEGE              
        for each row  
      begin   
        if :NEW.PRIVILEGE_ID is null then 
          select PRIVILEGE_SEQ.nextval into :NEW.PRIVILEGE_ID from dual; 
        end if; 
      end; 
      

      Oracle 11G以降を使用している場合は、代わりにこれを使用できます。

        if :NEW.PRIVILEGE_ID is null then 
          :NEW.PRIVILEGE_ID := PRIVILEGE_SEQ.nextval; 
        end if; 
      
    2. これが実際に発生するかどうかを調べます。主キーなしでレコードを挿入する場合は、なぜこれが発生するのか、および動作が正しいかどうかを確認する必要があります。それがトリガーで立ち往生している場合は、それ以外の場合は修正します。主キーなしでレコードを挿入しない場合は、トリガーを無効にすることができます。

      とにかくトリガーを無効にするのが最も簡単な方法かもしれませんが、それはあなたの挿入を壊します。これが本番データベースである場合、それが価値があるかどうかを判断できるのはあなただけです。個人的にはしません。



    1. 最も近い経度/緯度に一致

    2. mysqlストアドプロシージャ:limitステートメントで宣言された変数を使用するとエラーが返されます

    3. SQLServerデータベースオブジェクトをファイルシステム内のファイルとして公開する

    4. MYSQLはサイズがGBの巨大なSQLファイルを挿入します