2012-03-30 13 views
1

Ich brauche Hilfe beim Erstellen eines Triggers auf meinem table1, die bestimmte Spalten in table2 von table1 einfügen wird. Wie kann ich das machen? Ich benutze Oracle 11G XE.TRIGGER mit INSERT UND UPDATE

Hier ist mein Code:

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; ​ 

Was ist, wenn sie die Daten in ex_bulacan aktualisieren? Ändert sich automatisch auch meine allowance Tabelle?

+1

Es wird nicht geändert, wenn sie aktualisieren, weil Ihr Auslöser nur 'nach dem Einfügen 'ist –

Antwort

0

Nein, würden Sie einen Trigger wie folgt definiert müssen:

erstellen oder Trigger AllowanceTrigger nach Einsatz oder Update ersetzt .....

oder könnten Sie zwei Trigger erstellen - eine für Einsatz und ein zum Update

0

Wie in den Kommentaren von @ e-bacho 2.0 ausgeführt, wird beim Update nichts passieren. Sie müssen einen Trigger auch für das Ereignis after update angeben. oder implment Ihre eigentlichen Auslöser behandeln auch das Update

+0

Können Sie mir einen Code basierend auf meiner Codierung geben? –

+0

die Antwort von Justin Cave sollte tun, was Sie brauchen – Iridio

3

Nein, wenn Sie den Trigger ausgelöst werden sollen, wenn es Updates zu ex_bulacan, müssen Sie den Auslöser, um sowohl after insert und after update definiert werden. Wenn Sie die allowance Tabelle aktualisieren möchten, würden Sie so etwas wie

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; ​ 

wollen Das heißt, mit zwei Tabellen mit dem gleichen Satz von Daten bedeutet stark, dass Sie ein Problem mit der falschen Normalisierung haben. Es wäre im Allgemeinen viel besser, das Datenmodell zu reparieren, anstatt zu versuchen, die Daten über Trigger in zwei Tabellen synchron zu halten.

+0

Okay, ich werde versuchen, Ihren Code .. was ich will, wenn die SO_NO in ex_bulacan ist bereits in der Zulässigkeitstabelle wird es automatisch die Daten in der Erlaubnis Tabelle.Thanks !! –

+0

Ich habe diese Fehlermeldung Master bitte helfen Sie über diese "Kompilierung fehlgeschlagen, Zeile 23 (12:26:16) Die Zeile mit Kompilierungsfehlern zugeordnet sind relativ zu der ersten BEGIN-Anweisung. Dies betrifft nur die Kompilierung von Datenbank-Trigger." PLS-00103: Das Symbol ";" wenn man eines der folgenden Dinge erwartet: if –

+0

@MichaelPilapil - Hast du den Schnitt gesehen, den ich gemacht habe, um eine fehlende 'END IF' zu beheben? Wenn Sie die Tabelle 'allowance' basierend auf' so_no' aktualisieren möchten, müsste die 'WHERE'-Klausel im zweiten' UPDATE' auf 'so_no' verweisen. Ich nehme an, das würde bedeuten, dass Sie auch die 'plant_origin'-Spalte 'UPDATE' wollen. –