Mega Code Archive

 
Categories / Oracle PLSQL Tutorial / Trigger
 

Creating a Trigger

SQL> SQL> -- create demo table SQL> create table Employee(   2    ID                 VARCHAR2(4 BYTE)         NOT NULL,   3    First_Name         VARCHAR2(10 BYTE),   4    Last_Name          VARCHAR2(10 BYTE),   5    Start_Date         DATE,   6    End_Date           DATE,   7    Salary             Number(8,2),   8    City               VARCHAR2(10 BYTE),   9    Description        VARCHAR2(15 BYTE)  10  )  11  / Table created. SQL> SQL> -- prepare data SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)   2               values ('01','Jason',    'Martin',  to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto',  'Programmer')   3  / 1 row created. SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)   2                values('02','Alison',   'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester')   3  / 1 row created. SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)   2                values('03','James',    'Smith',   to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester')   3  / 1 row created. SQL> SQL> -- display data in the table SQL> select * from Employee   2  / ID   FIRST_NAME           LAST_NAME            START_DAT END_DATE      SALARY CITY       DESCRIPTION ---- -------------------- -------------------- --------- --------- ---------- ---------- --------------- 01   Jason                Martin               25-JUL-96 25-JUL-06    1234.56 Toronto    Programmer 02   Alison               Mathews              21-MAR-76 21-FEB-86    6661.78 Vancouver  Tester 03   James                Smith                12-DEC-78 15-MAR-90    6544.78 Vancouver  Tester 3 rows selected. SQL> SQL> CREATE OR REPLACE TRIGGER UpdateMajorStats   2    AFTER INSERT OR DELETE OR UPDATE ON employee   3  DECLARE   4    total_employee NUMBER;   5   6    CURSOR c_Statistics IS   7      SELECT city, COUNT(*) total_employee,   8             SUM(salary) total_salary   9        FROM employee  10        GROUP BY city;  11  BEGIN  12    FOR v_StatsRecord in c_Statistics LOOP  13      DBMS_OUTPUT.put_line(v_StatsRecord.total_salary);  14      DBMS_OUTPUT.put_line(v_StatsRecord.total_employee);  15      DBMS_OUTPUT.put_line(v_StatsRecord.city);  16  17      IF SQL%NOTFOUND THEN  18        DBMS_OUTPUT.put_line(v_StatsRecord.city);  19        DBMS_OUTPUT.put_line(v_StatsRecord.total_salary);  20        DBMS_OUTPUT.put_line(v_StatsRecord.total_employee);  21      END IF;  22    END LOOP;  23  END UpdateMajorStats;  24  / Trigger created. SQL> SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)   2                values('04','Celia',    'Rice',    to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78, 'Vancouver','Manager')   3  / 1234.56 1 Toronto 15551.34 3 Vancouver 1 row created. SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)   2                values('05','Robert',   'Black',   to_date('19840115','YYYYMMDD'), to_date('19980808','YYYYMMDD'), 2334.78, 'Vancouver','Tester')   3  / 1234.56 1 Toronto 17886.12 4 Vancouver 1 row created. SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)   2                values('06','Linda',    'Green',   to_date('19870730','YYYYMMDD'), to_date('19960104','YYYYMMDD'), 4322.78,'New York',  'Tester')   3  / 4322.78 1 New York 1234.56 1 Toronto 17886.12 4 Vancouver 1 row created. SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)   2                values('07','David',    'Larry',   to_date('19901231','YYYYMMDD'), to_date('19980212','YYYYMMDD'), 7897.78,'New York',  'Manager')   3  / 12220.56 2 New York 1234.56 1 Toronto 17886.12 4 Vancouver 1 row created. SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)   2                values('08','James',    'Cat',     to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester')   3  / 12220.56 2 New York 1234.56 1 Toronto 19118.9 5 Vancouver 1 row created. SQL> SQL> -- clean the table SQL> drop table Employee   2  / Table dropped. SQL>