2016-04-10 8 views
0

Ich habe eine EMPLOYEE-Tabelle, die ich einen Auslöser erstellen möchte, um zu protokollieren, wenn die Mitarbeiter Provisionen ändern (EMPCOMM). Ich habe eine Tabelle EMPLOYEE_COMM_AUDIT erstellt, um dies zu behandeln. Ich habe mit dem folgenden Code kommen:Oracle SQL - ORA-04079: ungültige Triggerspezifikation

CREATE OR REPLACE TRIGGER EMPLOYEE_COMM_AUDIT_TRIGGER 
BEFORE DELETE OR INSERT OR UPDATE OF EMP_COMM ON EMPLOYEE 
IF (NEW.EMP_COMM != OLD.EMPCOMM) 
BEGIN 
    UPDATE EMPLOYEE_COMM_AUDIT 
    SET EMPLOYEE_COMM_AUDIT.EMP_NUM = EMPLOYEE.EMP_NUM; 
    SET EMPLOYEE_COMM_AUDIT.CHANGE_DATE = (SYSDATE, 'MM-DD-YYYY HH24:MI:SS') FROM DUAL; 
    SET EMPLOYEE_COMM_AUDIT.USERNAME = CURRENT_USER; 
    SET EMPLOYEE_COMM_AUDIT.ACTION = NULL; 
    SET EMPLOYEE_COMM_AUDIT.OLD_COMM = OLD.EMPCOMM; 
    SET EMPLOYEE_COMM_ADUDIT.NEW_COMM = NEW.COMM; 
    DBMS_OUTPUT_LINE("Employee Commisions Audit has been updated); 
END; 

Allerdings Oracle SQL sagt mir: ORA-04079: invalid trigger specification, aber ich bin nicht immer rot unterstreicht überall, um anzuzeigen, wo der Fehler liegt.

Kann mir bitte jemand helfen? Ich habe versucht, mir diese Foren anzuschauen, aber ich kann nirgends eine solide Antwort finden.

Vielen Dank im Voraus.

Antwort

2

Ihre UPDATE Syntax ist alles falsch:

UPDATE EMPLOYEE_COMM_AUDIT 
    SET CHANGE_DATE = SYSDATE, 
     USERNAME = CURRENT_USER, 
     ACTION = NULL, 
     OLD_COMM = OLD.EMPCOMM, 
     NEW_COMM = NEW.COMM 
    WHERE EMP_NUM = :NEW.EMPNUM; 

Änderungen und Annahmen:

  • SET nur einmal erscheint.
  • Der Tabellenname muss nicht wiederholt werden.
  • Die Ausdrücke SET sind durch Kommata getrennt, nicht durch Semikolons.
  • Es ist nicht erforderlich, sysdate in ein Datum zu konvertieren, um es einer Datumsspalte zuzuordnen.
  • Sie benötigen eine WHERE-Klausel, um anzugeben, welche Zeile aktualisiert werden soll.

Dies behebt die update (oder versucht zu); Es könnte andere Probleme geben.

+0

Danke! Tolle Lösung –