2016-09-29 10 views
0

私は2つのテーブルがあります。条件付きのアップデートを使用してOracle SQLトリガー

  • cost_bank(私はトリガーを配置したい場所を、これがある)
  • master_dataを(この表は私がチェックするために必要な情報を持っています)

は私が新たに挿入されたcost_bank.work_codemaster_data.charge_type = 'EX'master_dataテーブルにあるときに実行cost_bankの「挿入後」トリガーを構築したいです。このシナリオが当てはまる場合は、IDで指定できる新しく追加された行のみを更新するように、master_data.r_cost_centerの値がcost_bank.cost_centercost_bankにトリガーします。ここで

は、私がこれまで持っているものです。

CREATE OR REPLACE TRIGGER expense_charge_cost_center 
AFTER INSERT ON cost_bank FOR EACH ROW 
WHEN (new.work_code in (select work_code from master_data where charge_type = 'EX')) 
BEGIN 
    update cost_bank set cost_center = (select r_cost_center 
    from master_data where work_code = new.work_code) where id = new.id; 
END; 

任意の洞察力はあなたが同じテーブルを変更したい場合は、あなたが前に挿入トリガーたい

答えて

0

を高く評価されています

CREATE OR REPLACE TRIGGER expense_charge_cost_center 
BEFORE INSERT ON cost_bank FOR EACH ROW 
WHEN (new.work_code in (select work_code from master_data where charge_type = 'EX')) 
BEGIN 
    select r_cost_center into :new.cost_center 
    from master_data 
    where work_code = new.work_code; 
END; 

実際にサブクエリがwhenで動作するかどうかはわかりませんので、必要な場合があります。

CREATE OR REPLACE TRIGGER expense_charge_cost_center 
BEFORE INSERT ON cost_bank FOR EACH ROW 
BEGIN 
    if (new.work_code in (select work_code from master_data where charge_type = 'EX')) then 
     select r_cost_center into :new.cost_center 
     from master_data 
     where work_code = new.work_code; -- I'm guessing you also want charge_type = 'EX' 
    end if; 
END;