Advertisement
TheLinkerZero

PL/pgSQL Trigger

Jul 26th, 2019
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 1.30 KB | None | 0 0
  1. CREATE TABLE employees(
  2.    id serial PRIMARY KEY,
  3.    first_name VARCHAR(40) NOT NULL,
  4.    last_name VARCHAR(40) NOT NULL
  5. );
  6.  
  7. CREATE TABLE employee_audits (
  8.    id serial PRIMARY KEY,
  9.    employee_id int ,
  10.    description VARCHAR(200),
  11.    first_name VARCHAR(40) ,
  12.    last_name VARCHAR(40) ,
  13.    changed_on TIMESTAMP(6)
  14. );
  15.  
  16. CREATE OR REPLACE FUNCTION log_last_name_changes()
  17.   RETURNS TRIGGER AS
  18. $BODY$
  19. BEGIN
  20.     IF NEW.last_name <> OLD.last_name THEN
  21.         INSERT INTO employee_audits(employee_id, first_name, last_name, changed_on, description)
  22.         VALUES(OLD.id, OLD.first_name, OLD.last_name, now(), CONCAT('Last Name Has Been Changed from ''', OLD.last_name, ''' to '' ', NEW.last_name));
  23.     END IF;
  24.     IF NEW.first_name <> OLD.first_name THEN
  25.        INSERT INTO employee_audits(employee_id, first_name, last_name, changed_on, description)
  26.        VALUES(OLD.id, OLD.first_name, OLD.last_name, now(), CONCAT('First Name Has Been Changed from ''', OLD.first_name, ''' to '' ', NEW.first_name));
  27.    END IF;
  28.     RETURN NEW;
  29. END;
  30. $BODY$
  31. LANGUAGE plpgsql;
  32.  
  33. CREATE TRIGGER last_name_changes
  34.   BEFORE UPDATE
  35.   ON employees
  36.   FOR EACH ROW
  37.   EXECUTE PROCEDURE log_last_name_changes();
  38.  
  39. UPDATE employees
  40. SET last_name = 'overandi'
  41. WHERE ID = 2;
  42.  
  43. SELECT * FROM employees;
  44. SELECT * FROM employee_audits;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement