DML操作(insert、delete、update),SQL语句影响了多少行记录,触发器就触发多少次。
例子如下:
-- 创建一张日志表,
CREATE TABLE TEST_LOG (
"TIMESTAMP" DATE, -- 时间
"USER_NAME" VARCHAR2(30 BYTE), -- 操作数据的数据库用户
"IP_ADDR" VARCHAR2(20 BYTE) -- ip
)
-- TEST_BIAO 为 被监控的表
-- TEST_BIAO_WATCHER 为 触发器的名
-- AFTER INSERT OR UPDATE OR DELETE 为 增删改操作后记录日志表
-- FOR EACH ROW 为 行级
CREATE OR REPLACE TRIGGER TEST_BIAO_WATCHER
AFTER INSERT OR UPDATE OR DELETE ON TEST_BIAO
FOR EACH ROW
DECLARE
v_user VARCHAR2(30); -- 操作数据的数据库用户
v_ip VARCHAR2(30); -- ip
v_operation_time TIMESTAMP; -- 时间
BEGIN
-- 获取数据库用户、IP、时间 并 赋值
SELECT USER, SYS_CONTEXT('USERENV', 'IP_ADDRESS'), SYSDATE INTO v_user, v_ip, v_operation_time FROM DUAL;
-- 插入数据到日志表
INSERT INTO TEST_LOG (USER_NAME, IP_ADDR, TIMESTAMP)
VALUES (v_user, v_ip, v_operation_time);
END;