2016-04-10 1 views
0

J'ai une table EMPLOYEE, que je veux créer un déclencheur pour se connecter lorsque les commissions des employés changent (EMPCOMM). J'ai créé une table EMPLOYEE_COMM_AUDIT pour gérer cela. Je suis venu avec le code suivant:Oracle SQL - ORA-04079: spécification de trigger invalide

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; 

Cependant Oracle SQL me dit: ORA-04079: invalid trigger specification, mais je ne reçois pas tout rouge souligne nulle part où indiquer où la faute est.

Quelqu'un peut-il m'aider s'il vous plaît? J'ai essayé de jeter un oeil sur ces forums, mais je n'arrive pas à trouver une réponse solide nulle part.

Merci d'avance.

Répondre

2

Votre UPDATE syntaxe est tout faux:

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; 

Changements et hypothèses:

  • SET apparaît uniquement une fois.
  • Le nom de la table n'a pas besoin d'être répété.
  • Les expressions SET sont séparées par des virgules et non par des points-virgules.
  • Il n'est pas nécessaire de convertir sysdate en date pour l'affecter à une colonne de date.
  • Vous avez besoin d'une clause WHERE pour spécifier quelle ligne doit être mise à jour.

Ceci corrige le update (ou tente de); il peut y avoir d'autres problèmes.

+0

Merci! Grande difficulté –