2012-03-30 25 views
1

table1にトリガーを作成すると、table2からtable1に特定の列が挿入されます。どうやってやるの?私はOracle 11G XEを使用しています。ここでトリガー挿入と更新

は私のコードです:

create or replace trigger AllowanceTrigger 
after insert on ex_bulacan 
for each row 
begin 
    insert into allowance (PLANT_ORIGIN,SO_NO, SO_STATUS,SO_REMARKS,DRIVER_NAME) 
    values (:new.plant_origin, :new.sales_order_no, :new.status,:new.remarks, :new.driver_name); 
end; ​ 

彼らはex_bulacan内のデータを更新する場合はどう? allowanceテーブルも自動的に変更されますか?

+1

トリガーが「挿入後」であるため、更新時に変更されません –

答えて

0

いいえ、あなたはこのように定義されたトリガが必要になります.....挿入または更新後

をトリガーAllowanceTriggerを作成したり、交換する

か、2つのトリガー作成することができます - 挿入のための1つ、および1つを更新のため

0

@ e-bacho 2.0のコメントで述べたように、更新中は何も起こりません。 after updateイベントに対してもトリガーを指定する必要があります。更新がex_bulacanにある場合や、更新

+0

私のコードに基づいてコードを教えてもらえますか? –

+0

ジャスティン・ケイブからの回答は、あなたが必要とするものを行うべきである – Iridio

3

号を処理するために、あなたの実際のトリガーimplmentあなたは、トリガーが起動したい場合は、after insertafter updateの両方を定義するトリガーが必要になります。あなたがallowanceテーブルを更新する場合は、強く、あなたが不適切な正規化の問題を持っていることを意味し、データの同じセットを持つ2つのテーブルを有し、

create or replace trigger AllowanceTrigger 
after insert or update on ex_bulacan 
for each row 
begin 
    if(inserting) 
    then 
    insert into allowance (PLANT_ORIGIN, 
          SO_NO, 
          SO_STATUS, 
          SO_REMARKS, 
          DRIVER_NAME) 
    values (:new.plant_origin, 
      :new.sales_order_no, 
      :new.status, 
      :new.remarks, 
      :new.driver_name); 
    end if; 

    if(updating) 
    then 
    update allowance 
     set plant_origin = :new.plant_origin, 
      so_status = :new.status, 
      so_remarks = :new.remarks, 
      driver_name = :new.driver_name 
    where so_no = :new.sales_order_no; 
    end if; 
end; ​ 

、のような何かをしたいと思います。トリガーを介して2つのテーブルにデータを同期させて保持するのではなく、データモデルを修正する方が一般にはるかに優れています。

+0

私はあなたのコードを試してみるつもりです。ex_bulacanのSO_NOが既に手当テーブルに入っていれば、自動的に手当支給テーブルのデータを更新します。 –

+0

私はこのエラーマスターを助けてください "Compilation failed、line 23(12:26:16)コンパイルエラーに関連する行番号は最初のBEGIN文に関連しています。これはデータベーストリガーのコンパイルにのみ影響します。 PLS-00103:シンボル「;」が検出されました。次のいずれかを期待している場合: –

+0

@MichaelPilapil - 私が行方不明の「END IF」を修正するために行った編集を見ましたか? 'so_no'に基づいて' allowance'テーブルを更新したい場合、 'UPDATE'の' WHERE'句は 'so_no'を参照する必要があります。私はそれが 'plant_origin'カラムも' UPDATE'したいと思っていると思います。 –

関連する問題