することはでき通知の場合、"挿入や更新のトリガ'が停止します。

dba.stackexchange https://dba.stackexchange.com/questions/6880

  •  16-10-2019
  •  | 
  •  

質問

先週かったので after insert or update trigger ん。後障害者および有効で働き始めました。

まだ知らないのはなぜで停止します。必要があります。に対す。このトリガー記録の値を日々の仕事などに使われています。報告す。このトリガーが死亡し、数日でずっ告やエラーなります。

を使用していOracle10g、アクセスのdbを利用sqldeveloper

My Trigger

create or replace
TRIGGER MASTER.INSTANCE_STEP_TRG 
AFTER INSERT OR UPDATE OF SYSID,STEP_ID,INSTANCE_ID,PARENT_STEP_ID ON MASTER.WF_INSTANCE_STEP 
REFERENCING OLD AS old NEW AS new 
FOR EACH ROW 
WHEN (new.sysid > 0) 
declare 
stepSysid number;
crCode varchar(50);
crDate date;
step_id number;
BEGIN
  step_id := :new.step_id;

  select ss.sysid into stepSysid from TEMPLATE.wf_step ws 
  inner join TEMPLATE.step_stage ss on ss.sysid=ws.stage_id
  where ws.sysid= step_id;


  if ( stepSysid>0) then
    insert into MASTER.fact_cr_progress values(0,:new.instance_id,stepSysid,:new.create_dt);
  end if;

  dbms_output.enable(10000);
  dbms_output.put_line('start print');

END;
役に立ちましたか?

解決

トリガーは単に動作を停止することはできません。

トリガーを無効にすることができます。トリガーをドロップできます。 DDLが参照されるオブジェクトの1つに対してDDLが実行されるとトリガーが無効になりますが、トリガーステートメントが実行された場合でも実行されます。トリガーが正常に再コンパイルできない場合、トリガーステートメントはエラーが発生します

ORA-04098: trigger ' MASTER.INSTANCE_STEP_TRG' is invalid and failed re-validation

また、トリガーが宣言されたとおりに正しく機能していた可能性もありますが、意図したとおりではありません。たとえば、new.sysidが0以下ではなかった可能性があります(nullが0より大きくないことを忘れない) WHEN 満たされない条項。それはおそらくあなたのものです SELECT ステートメントは0以下の値を0以下に返し、したがってあなたを引き起こします INSERT 実行されない。どちらかの場合 TEMPLATE.wf_step また TEMPLATE.step_stage 列があります STEP_ID, 、 WHERE

where ws.sysid= step_id;

解釈します STEP_ID テーブルの列として、ローカル変数ではありません STEP_ID. 。 PL/SQL開発者が一般的にローカル変数にプレフィックスを追加する理由の1つ(つまり、 L_STEP_ID それよりも STEP_ID)この種のスコープ解像度の問題はデバッグが難しいことで有名であるため、テーブルの列でも使用される名前を誤って使用することを避けるためです。

他のヒント

これによりそのトリガ'が停止'.

場でトリガされるものになるので、きめ細やかなケアを行っていを入れているトリガーメッセージ EXCEPTION ブロックです。

の場合は無効に間違いがあるという特性が正の場合で走る(例えば、私は一部トリガーするの移植の実現がることは難しい計算ができます。いcronジョブするかどうかをチェックした時は直近の記録にテーブルの場合でも、報告を行います。ない場合も明らかなように、常にテーブルをならべるだけで追跡がトリガーの最後の行、更新するとともにw/の現在の時刻です。

もちろん、もしこの人の助け合いジャスティン洞窟記のコマンドにおいて誤解を招くおそれのための変数名。きち elseif ( stepSysid>0) 支店および報告のありかすことのできないなどが実際に起こるのよ。

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top