Oracle 触发器:记录对 SCOTT.EMP 表的操作日志
要将用户对 scott.emp 表的所有操作过程记录到日志表 t_log 中,可以使用触发器来实现。\n\n首先,创建日志表 t_log:\n\nsql\nCREATE TABLE t_log (\n logid NUMBER GENERATED ALWAYS AS IDENTITY,\n username VARCHAR2(100),\n logtime DATE,\n logdata VARCHAR2(4000)\n);\n\n\n然后,创建一个触发器,当用户对 scott.emp 表进行插入、更新或删除操作时,将相应的操作信息插入到 t_log 表中:\n\nsql\nCREATE OR REPLACE TRIGGER trg_emp_logging\nAFTER INSERT OR UPDATE OR DELETE ON scott.emp\nFOR EACH ROW\nDECLARE\n v_username VARCHAR2(100);\n v_logtime DATE;\n v_logdata VARCHAR2(4000);\nBEGIN\n -- 获取当前数据库操作的用户名\n SELECT USER INTO v_username FROM DUAL;\n -- 获取当前操作的数据库时间点\n v_logtime := SYSDATE;\n \n -- 根据操作类型构建 logdata 字符串\n IF INSERTING THEN\n v_logdata := 'INSERT: ' || :NEW.empno || ', ' || :NEW.ename || ', ' || :NEW.job;\n ELSIF UPDATING THEN\n v_logdata := 'UPDATE: ' || :OLD.empno || ', ' || :OLD.ename || ', ' || :OLD.job ||\n ' -> ' || :NEW.empno || ', ' || :NEW.ename || ', ' || :NEW.job;\n ELSIF DELETING THEN\n v_logdata := 'DELETE: ' || :OLD.empno || ', ' || :OLD.ename || ', ' || :OLD.job;\n END IF;\n \n -- 插入日志记录\n INSERT INTO t_log (username, logtime, logdata)\n VALUES (v_username, v_logtime, v_logdata);\nEND;\n/\n\n\n现在,当用户对 scott.emp 表进行插入、更新或删除操作时,相关的操作信息将被记录到 t_log 表中。
原文地址: https://www.cveoy.top/t/topic/ptaW 著作权归作者所有。请勿转载和采集!