1. 创建测试表
首先,创建一个名为 SAMPLE_TABLE 的简单测试表,包含两个字段:ID 和 DATA。
CREATE TABLE SAMPLE_TABLE (
ID NUMBER PRIMARY KEY,
DATA VARCHAR2(50)
);
2. 创建触发器对应的审计日志表及辅助序列
创建一个名为 AUDIT_LOG 的表,用于记录触发器触发时的相关信息。
这里假设包含以下字段:LOG_ID(自增主键,通过序列生成)、
TABLE_NAME(触发操作的表名)、ACTION_TIME(操作时间戳)、
ACTION_USER(操作用户)。同时,创建一个名为 AUDIT_LOG_SEQ 的序列,用于为 LOG_ID 字段生成唯一值。
CREATE SEQUENCE AUDIT_LOG_SEQ START WITH 1 INCREMENT BY 1;
CREATE TABLE AUDIT_LOG (
LOG_ID NUMBER PRIMARY KEY,
TABLE_NAME VARCHAR2(30),
ACTION_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
ACTION_USER VARCHAR2(30) DEFAULT USER
);
3. 创建触发器
接下来,创建一个名为 SAMPLE_TRIGGER 的触发器,该触发器将在每次向
SAMPLE_TABLE 插入数据后自动执行。触发器的功能是记录插入操作的时间戳和操作用户到 AUDIT_LOG 表中。
CREATE OR REPLACE TRIGGER SAMPLE_TRIGGER
AFTER INSERT ON SAMPLE_TABLE
FOR EACH ROW
BEGIN
INSERT INTO AUDIT_LOG (LOG_ID, TABLE_NAME, ACTION_USER)
VALUES (AUDIT_LOG_SEQ.NEXTVAL, 'SAMPLE_TABLE', USER);
END;
4. 验证触发器是否已创建 使用以下SQL查询检查触发器是否已成功创建:
SELECT * FROM USER_TRIGGERS WHERE TRIGGER_NAME = 'SAMPLE_TRIGGER';
5. 向测试表插入数据
现在,您可以向 SAMPLE_TABLE 插入数据,每次插入后,触发器 SAMPLE_TRIGGER 都会自动将操作时间和操作用户记录到 AUDIT_LOG 表中。
INSERT INTO SAMPLE_TABLE (ID, DATA) VALUES (1, 'Data 1');
INSERT INTO SAMPLE_TABLE (ID, DATA) VALUES (2, 'Data 2');
-- ... 进行更多插入操作 ...
6. 查询触发器效果 通过查询 AUDIT_LOG 表,验证触发器是否正确记录了插入操作。
SELECT * FROM AUDIT_LOG WHERE TABLE_NAME = 'SAMPLE_TABLE';
7. 删除触发器
DROP TRIGGER SAMPLE_TRIGGER;
查询所有触发器 :SELECT * FROM USER_TRIGGERS;