I am trying to create a trigger that will update an employee audit table when a row is changed. Using a sequence number to assign a unique identifier to each row as it is created. Need to capture the user ID, date of the change, and the action (update), plus the before image of the row.
CREATE SEQUENCE emp_audit_seq START WITH 10;
Create table emp (
empno NUMBER(4) Primary Key,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2));
CREATE TABLE emp_audit (
audit_uid NUMBER(15) Primary Key,
change_date DATE,
change_user VARCHAR2(30),
action CHAR(1),
empno NUMBER(4),
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2));
CREATE OR REPLACE TRIGGER trig_emp_audit
BEFORE UPDATE ON emp
FOR EACH ROW
BEGIN
INSERT INTO emp_audit
VALUES(emp_audit_seq.nextval, change_date, change_user, action, :old.empno, :old.ename, :old.job, :old.mgr, :old.hiredate, :old.sal, :old.comm, deptno);
END;
/
Warning: Trigger created with compilation errors.
SQL> show errors
Errors for TRIGGER TRIG_EMP_AUDIT:
LINE/COL ERROR
-------- -----------------------------------------------
2/3 PL/SQL: SQL Statement ignored
3/149 PL/SQL: ORA-00984: column not allowed here
Can anyone assist in helping me find what I am doing wrong with the trigger?
Edited by: LostNoob on Aug 25, 2012 2:24 PM