DEMO adatbázis (EMP és DEPT táblák)
Ha saját gépen dolgozol, az alábbi feladathoz letöltheted a DEMO adatbázist, amely létrehozza az EMP és DEPT táblákat.
Ha saját gépen dolgozol, az alábbi feladathoz letöltheted a DEMO adatbázist, amely létrehozza az EMP és DEPT táblákat.
Hozzuk létre az EMPCHGLOG segédtáblát, ahol a tároljuk majd a változásokat!
CREATE TABLE empchglog ( chg_date DATE, chg_desc VARCHAR2(50));
Hozzuk létre a triggert!
CREATE OR REPLACE TRIGGER emp_chg_trig
AFTER INSERT OR UPDATE OR DELETE
ON emp
FOR EACH ROW
DECLARE
v_empno emp.empno%TYPE;
v_action VARCHAR2(7);
v_chgdesc VARCHAR2(30);
BEGIN
IF INSERTING THEN
v_action := 'Added';
v_empno := :NEW.empno;
v_chgdesc := '';
ELSIF UPDATING THEN
v_action := 'Updated';
v_empno := :NEW.empno;
v_chgdesc := 'Updated ';
IF NVL(:OLD.ename, '-null-') != NVL(:NEW.ename, '-null-') THEN
v_chgdesc := v_chgdesc || 'name';
END IF;
IF NVL(:OLD.job, '-null-') != NVL(:NEW.job, '-null-') THEN
v_chgdesc := v_chgdesc || 'job';
END IF;
IF NVL(:OLD.sal, -1) != NVL(:NEW.sal, -1) THEN
v_chgdesc := v_chgdesc || 'salary';
END IF;
IF NVL(:OLD.comm, -1) != NVL(:NEW.comm, -1) THEN
v_chgdesc := v_chgdesc || 'commission';
END IF;
IF NVL(:OLD.deptno, -1) != NVL(:NEW.deptno, -1) THEN
v_chgdesc := v_chgdesc || 'department';
END IF;
ELSIF DELETING THEN
v_action := 'Deleted';
v_empno := :OLD.empno;
v_chgdesc := '';
END IF;
INSERT INTO empchglog VALUES (SYSDATE, v_action || ' employee # ' || v_empno || v_chgdesc);
END;
Megjegyzés:
Az NVL() függvény két paraméterrel rendelkezik. Megnézi, hogy az első paraméter értéke NULL-e, ha igen, akkor a második paraméter értékével tér vissza, ha nem, akkor az első paraméter értékével tér vissza. Ezzel tulajdonképpen a NULL értéknek lehet valamilyen más, vizsgálható értéket adni.
Hajtsunk végre pár műveletet!
INSERT INTO emp VALUES (9003,'PETERS','ANALYST',7782,SYSDATE,5000.00,NULL,40);INSERT INTO emp VALUES (9004,'AIKENS','ANALYST',7782,SYSDATE,4500.00,NULL,40);UPDATE emp SET comm = sal * 1.1 WHERE empno IN (9003, 9004);
Nézzük meg az EMPCHGLOG tábla tartalmát!
SELECT * FROM empchglog;
Mit csinál a trigger?
Licensed under the Creative Commons Attribution Share Alike License 4.0