DML触发器--记录某张表的dml操作
2013-10-09 11:22
302 查看
CREATE TABLE logs(
LOG_ID NUMBER(10) PRIMARY KEY,
LOG_TABLE VARCHAR2(10) NOT NULL,
LOG_DML VARCHAR2(10),
LOG_KEY_ID NUMBER(10),
LOG_DATE DATE,
LOG_USER VARCHAR2(15),
LOG_TERMINAL varchar2(100),
LOG_IP_ADDRESS varchar2(20)
);
CREATE SEQUENCE logs_id_squ INCREMENT BY 1
START WITH 1 MAXVALUE 9999999 NOCYCLE NOCACHE;
CREATE OR REPLACE TRIGGER DML_LOG
BEFORE --触发时间为操作前
DELETE OR INSERT OR UPDATE -- 由三种事件触发
ON emp
FOR EACH ROW -- 行级触发器
BEGIN
IF INSERTING THEN
INSERT INTO logs VALUES(logs_id_squ.NEXTVAL,'EMP','INSERT',:new.empno,SYSDATE,USER,SYS_CONTEXT('USERENV','TERMINAL'),SYS_CONTEXT('USERENV','IP_ADDRESS'));
ELSIF DELETING THEN
INSERT INTO logs VALUES(logs_id_squ.NEXTVAL,'EMP','DELETE',:old.empno,SYSDATE,USER,SYS_CONTEXT('USERENV','TERMINAL'),SYS_CONTEXT('USERENV','IP_ADDRESS'));
ELSE
INSERT INTO logs VALUES(logs_id_squ.NEXTVAL,'EMP','UPDATE',:new.empno,SYSDATE,USER,SYS_CONTEXT('USERENV','TERMINAL'),SYS_CONTEXT('USERENV','IP_ADDRESS'));
END IF;
END;
/
/** 测试部分
insert into emp values(1234,'shawn','clerk',7902,sysdate,3000);
commit;
select * from emp;
select * from logs;
update emp set sal=5000 where empno=1234;
commit;
select * from emp;
select * from logs;
delete * from emp where empno=1234;
commit;
select * from emp;
select * from logs;
**/
LOG_ID NUMBER(10) PRIMARY KEY,
LOG_TABLE VARCHAR2(10) NOT NULL,
LOG_DML VARCHAR2(10),
LOG_KEY_ID NUMBER(10),
LOG_DATE DATE,
LOG_USER VARCHAR2(15),
LOG_TERMINAL varchar2(100),
LOG_IP_ADDRESS varchar2(20)
);
CREATE SEQUENCE logs_id_squ INCREMENT BY 1
START WITH 1 MAXVALUE 9999999 NOCYCLE NOCACHE;
CREATE OR REPLACE TRIGGER DML_LOG
BEFORE --触发时间为操作前
DELETE OR INSERT OR UPDATE -- 由三种事件触发
ON emp
FOR EACH ROW -- 行级触发器
BEGIN
IF INSERTING THEN
INSERT INTO logs VALUES(logs_id_squ.NEXTVAL,'EMP','INSERT',:new.empno,SYSDATE,USER,SYS_CONTEXT('USERENV','TERMINAL'),SYS_CONTEXT('USERENV','IP_ADDRESS'));
ELSIF DELETING THEN
INSERT INTO logs VALUES(logs_id_squ.NEXTVAL,'EMP','DELETE',:old.empno,SYSDATE,USER,SYS_CONTEXT('USERENV','TERMINAL'),SYS_CONTEXT('USERENV','IP_ADDRESS'));
ELSE
INSERT INTO logs VALUES(logs_id_squ.NEXTVAL,'EMP','UPDATE',:new.empno,SYSDATE,USER,SYS_CONTEXT('USERENV','TERMINAL'),SYS_CONTEXT('USERENV','IP_ADDRESS'));
END IF;
END;
/
/** 测试部分
insert into emp values(1234,'shawn','clerk',7902,sysdate,3000);
commit;
select * from emp;
select * from logs;
update emp set sal=5000 where empno=1234;
commit;
select * from emp;
select * from logs;
delete * from emp where empno=1234;
commit;
select * from emp;
select * from logs;
**/
相关文章推荐
- Delphi 变体类型(Variant)的介绍(流与变体类型的相互转换、变体类型常用的函数) .
- 创建自己的/proc文件——processinfo
- 随 笔
- TStrings与Memo.Lines赋值的问题
- 最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和
- Xcache实现PHP的加速
- js新手学习中:js创建div和img并把img插入div中
- phpcms v9二次开发之模型类的应用(1)
- Python 实现SSH client
- 文件的存储
- 【select】 优化问题
- jquery的each函数中的break和continue功能
- 设置分录表格的标题,给分录添加按钮,当标题无法显示全部文字时,可修改参数改变标题控件的长度。
- Drupal如何集中控制静态变量?
- windows 安装配置 ant
- phpcms v9二次开发之数据模型类
- phpcms v9二次开发之模型类的应用(2)
- [Windows Hook] 屏蔽键盘按键
- nuc710使用注意点
- STL,ATL,WTL之间的联系和区别