Quite a few errors.
- you can't use e.g.
:insert, :sysdate; should be 'insert', sysdate
- statement must be terminated by a semi-colon
- it is
elsif, not elseif
new.job is missing a colon
How to find out what's wrong? Like this:
Warning: Trigger created with compilation errors.
SQL> show err
Errors for TRIGGER EMP_TRIGGER:
LINE/COL ERROR
-------- -----------------------------------------------------------------
3/5 PL/SQL: SQL Statement ignored
3/81 PL/SQL: ORA-00984: column not allowed here
SQL>
Or, query USER_ERRORS.
Sample tables (don't mind dummy datatypes) (temp instead of emp; temp_backup instead of emp_backup as I don't want to drop my own emp table):
SQL> CREATE TABLE temp
2 (
3 empno NUMBER,
4 emp_panno NUMBER,
5 ename NUMBER,
6 job NUMBER,
7 hire_date NUMBER,
8 salary NUMBER,
9 age NUMBER,
10 city NUMBER,
11 pincode NUMBER,
12 state NUMBER
13 );
Table created.
SQL> CREATE TABLE temp_backup
2 AS
3 SELECT * FROM temp;
Table created.
SQL>
SQL> ALTER TABLE temp_backup
2 ADD (what NUMBER, when DATE);
Table altered.
SQL>
Trigger, after errors have been fixed:
SQL> create or replace trigger emp_trigger
2 after insert or delete or update on temp
3 for each row
4 enable
5 begin
6 if inserting then
7 insert into temp_backup values (:new.empno, :new.emp_panno, :new.ename, :new.job,
8 :new.hire_date, :new.salary, :new.age, :new.city, :new.pincode, :new.state, 'insert', sysdate);
9 elsif deleting then
10 insert into temp_backup values(:old.empno, :old.emp_panno, :old.ename, :old.job,
11 :old.hire_date, :old.salary, :old.age, :old.city, :old.pincode, :old.state,
12 'delete', sysdate);
13 elsif updating then
14 insert into temp_backup values (:old.empno, :old.emp_panno, :old.ename, :old.job,
15 :old.hire_date, :old.salary, :old.age, :old.city, :old.pincode, :old.state,
16 'update', sysdate);
17 end if;
18 end;
19 /
Trigger created.
SQL>
Although that's not an error, I'd suggest you to always name all columns you use. Don't just
insert into temp_backup values ...
Specify all columns:
insert into temp_values (empno, emp_panno, ename, ...) values ...
It is a little bit more typing, but pays off in long term.
[EDIT] After you posted EMP table description: as I said, if you name all columns involved and pay attention about datatypes, it works.
Sample tables:
SQL> CREATE TABLE temp
2 (
3 EMPNO NUMBER (8),
4 EMP_PANNO NUMBER (10),
5 ENAME VARCHAR2 (20),
6 JOB VARCHAR2 (15),
7 HIRE_DATE DATE,
8 SALARY NUMBER (10),
9 AGE NUMBER (8),
10 CITY VARCHAR2 (25),
11 PINCODE NUMBER (8),
12 STATE VARCHAR2 (15)
13 );
Table created.
SQL> CREATE TABLE temp_backup
2 AS
3 SELECT *
4 FROM temp
5 WHERE 1 = 2;
Table created.
SQL> ALTER TABLE temp_backup
2 ADD (what varchar2(10), when DATE);
Table altered.
Trigger:
SQL> create or replace trigger emp_trigger
2 after insert or delete or update on temp
3 for each row
4 enable
5 begin
6 if inserting then
7 insert into temp_backup (empno, emp_panno, ename, job,
8 hire_date, salary, age, city, pincode, state, what, when) values (:new.empno, :new.emp_panno, :new.ename, :new.job,
9 :new.hire_date, :new.salary, :new.age, :new.city, :new.pincode, :new.state, 'insert', sysdate);
10 elsif deleting then
11 insert into temp_backup (empno, emp_panno, ename, job,
12 hire_date, salary, age, city, pincode, state, what, when)values(:old.empno, :old.emp_panno, :old.ename, :old.job,
13 :old.hire_date, :old.salary, :old.age, :old.city, :old.pincode, :old.state,
14 'delete', sysdate);
15 elsif updating then
16 insert into temp_backup (empno, emp_panno, ename, job,
17 hire_date, salary, age, city, pincode, state, what, when)values (:old.empno, :old.emp_panno, :old.ename, :old.job,
18 :old.hire_date, :old.salary, :old.age, :old.city, :old.pincode, :old.state,
19 'update', sysdate);
20 end if;
21 end;
22 /
Trigger created.
Testing:
SQL> INSERT INTO temp (empno,
2 emp_panno,
3 ename,
4 job,
5 hire_date,
6 salary,
7 age,
8 city,
9 pincode,
10 state)
11 VALUES (027,
12 7896,
13 'sudhir',
14 'dev',
15 TO_DATE ('19/08/1999', 'dd/mm/yyyy'),
16 5600,
17 34,
18 'senaica',
19 223021,
20 'uttar pradesh');
1 row created.
Result:
SQL> select * from temp;
EMPNO EMP_PANNO ENAME JOB HIRE_DATE SALARY
---------- ---------- -------------------- --------------- ---------- ----------
AGE CITY PINCODE STATE
---------- ------------------------- ---------- ---------------
27 7896 sudhir dev 19/08/1999 5600
34 senaica 223021 uttar pradesh
SQL> select * from temp_backup;
EMPNO EMP_PANNO ENAME JOB HIRE_DATE SALARY
---------- ---------- -------------------- --------------- ---------- ----------
AGE CITY PINCODE STATE WHAT
---------- ------------------------- ---------- --------------- ----------
WHEN
----------
27 7896 sudhir dev 19/08/1999 5600
34 senaica 223021 uttar pradesh insert
25/06/2021
SQL>