Oracle PL/SQL - Nach dem UPDATE-Trigger-Beispiel

Oracle PL / SQL - Beispiel für einen UPDATE-Trigger

Dieser Artikel zeigt Ihnen, wie SieAFTER UPDATE TRIGGER verwenden. Er wird ausgelöst, nachdem der Aktualisierungsvorgang ausgeführt wurde.

1. Protokollierungsbeispiel

In diesem Beispiel wird nach jeder Aktualisierung in der Spalte "SALARY" vonemployee_salary ein Trigger "after update" ausgelöst und die neuen aktualisierten Daten zu Prüfzwecken in die Tabelle "employee_salary_log" eingefügt.

1.1 Create tables and trigger.

Mitarbeitergehalt

CREATE TABLE employee_salary
(
    EMP_ID number(10),
    SALARY number(10),
    EMP_NAME varchar2(50)
);

employee_salary_log

CREATE TABLE employee_salary_log
(
    EMP_ID number(10),
    NEW_SALARY number(10),
    UPDATED_DATE date,
    UPDATED_BY varchar2(20)
);

trg_log_employee_salary

CREATE OR REPLACE TRIGGER trg_log_employee_salary
AFTER UPDATE
  OF SALARY
    ON employee_salary
FOR EACH ROW

DECLARE
username varchar2(20);

BEGIN

    -- get current login user
    SELECT USER INTO username FROM dual;

    -- Insert new values into log table.
    INSERT INTO employee_salary_log VALUES (
        :NEW.EMP_ID, :NEW.SALARY, sysdate, username);
END;

Note
Aktualisieren Sie vor dem Update-Trigger nicht dieemployee_salary-Tabelle. Es wird ein rekursiver Trigger erstellt und ausgeführt, bis der Arbeitsspeicher aufgebraucht ist.

1.2 Insert data to test the trigger.

INSERT INTO employee_salary VALUES (101,15000,'Pranav');

INSERT INTO employee_salary VALUES (201,40000,'Vikram');

INSERT INTO employee_salary VALUES (301,35000,'Nikhil');

-- fire trigger, insert into log table
UPDATE employee_salary SET SALARY = '28000' WHERE emp_id = 101;

-- fire trigger, insert into log table
UPDATE employee_salary SET SALARY = '43000' WHERE emp_id = 301;

1.3 Display the data.

select * from EMPLOYEE_SALARY;
EMP_ID GEHALT EMP_NAME

101

28000

Pranav

201

40000

Vikram

301

43000

Nikhil

select * from EMPLOYEE_SALARY_LOG;
EMP_ID NEW_SALARY NEUES DATUM AKTUALISIERT VON

101

28000

10-JUN-17

SYSTEM

301

43000

10-JUN-17

SYSTEM

2. Protokollierung mit WHEN-Bedingung

In diesem Beispiel wird nach jeder Aktualisierung in der Spalte "GEHALT" vonemployee_salary mit einer Erhöhung von mehr als 50000 ein Auslöser "nach der Aktualisierung" ausgelöst und die neuen aktualisierten Daten in die Tabelle "employee_salary_log" eingefügt.

2.1 Create tables and trigger.

Mitarbeitergehalt

CREATE TABLE employee_salary
(
    EMP_ID number(10),
    SALARY number(10),
    EMP_NAME varchar2(50)
);

employee_salary_hike_log

CREATE TABLE employee_salary_hike_log
(
    EMP_ID number(10),
    NEW_SALARY number(10),
    HIKE number(10),
    UPDATED_DATE date,
    UPDATED_BY varchar2(20)
);

trg_log_salary_hike

CREATE OR REPLACE TRIGGER trg_log_salary_hike
AFTER UPDATE
  OF SALARY
    ON employee_salary
FOR EACH ROW
WHEN ((NEW.SALARY - OLD.SALARY) > 50000)

DECLARE
username varchar2(20);

BEGIN

    SELECT USER INTO username FROM dual;

    -- Insert new values into log table.
    INSERT INTO employee_salary_hike_log VALUES (
        :NEW.EMP_ID, :NEW.SALARY, :NEW.SALARY - :OLD.SALARY ,sysdate, username);
END;

2.2 Insert data to test the trigger.

INSERT INTO employee_salary VALUES (101,15000,'Pranav');

INSERT INTO employee_salary VALUES (201,40000,'Vikram');

INSERT INTO employee_salary VALUES (301,35000,'Nikhil');

-- new salary - old salary > 50000, fire after update trigger, insert into log
UPDATE employee_salary SET SALARY = '70000' WHERE emp_id = 101;

UPDATE employee_salary SET SALARY = '100000' WHERE emp_id = 301;

-- new salary - old salary < 50000, no action.
UPDATE employee_salary SET SALARY = '45000' WHERE emp_id = 201;

2.3 Display the data.

select * from EMPLOYEE_SALARY;
EMP_ID GEHALT EMP_NAME

101

70000

Pranav

201

45000

Vikram

301

100000

Nikhil

select * from EMPLOYEE_SALARY_HIKE_LOG;
EMP_ID NEW_SALARY HIKE NEUES DATUM AKTUALISIERT VON

101

70000

55000

10-JUN-17

HR

301

100000

65000

10-JUN-17

HR