3

一意の varchar 主キーへの挿入をブロックしていたデータベースで次のトリガーが見つかりました

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; 

これは自動番号ジェネレーターですか? 問題を解決するために簡単に無効にすることができますが、主キーに予期しない悪影響が及ぶことはありますか?

私は実際に、主キーの自動インクリメント トリガーを設定するコードを探していました。これが実行されている場合は、これをテンプレートとして使用できます。そうである場合、主キーが明確にPRIVILEGE_IDないため、誤って実行している可能性があります。また、競合などの場合にPRIVILEGE-ID何らかの問題が発生するべきではありませんか?application_error

4

3 に答える 3

1

このスクリプトは、シーケンスから値を取得し、テーブルに新しく挿入された行に配置します。自動番号と非常によく似た動作をします。アプリケーション コードは、挿入された行の主キーを設定するためにこのトリガーに依存していると思いますが、アプリケーションのソース コードを評価する前に削除することはお勧めしません。

これが実験について忘れられていない限り、アプリケーション コードはこのトリガー/シーケンスに依存している可能性があります。

これは、自動インクリメント機能の受け入れ可能なソリューションです。参照: Oracle で AUTO_INCREMENT を使用して ID を作成する方法

于 2013-05-05T20:04:23.567 に答える