创建一个记录dml的触发器


创建两个表.其实test为我们在操作的表.而script为记录对test表进行dml操作的script:

SQL> create table SCRIPT
2 (
3 SCRIPT VARCHAR2(4000),
4 TABLENAME VARCHAR2(20),
5 RUNDATE DATE
6 )
7 /

Table created

SQL>
SQL> create table TEST
2 (
3 ID NUMBER not null,
4 NAME VARCHAR2(20)
5 )
6 /

Table created

--创建触发器

SQL> Create Or Replace Trigger Trg_Test
2 After Insert Or Update Or Delete On Test
3 For Each Row
4 Declare
5 l_Dmlsql Varchar2(4000);
6 Begin
7 If Inserting Then
8 l_Dmlsql := 'insert into test(id,name) values(' || :New.Id || ',' || :New.Name || ');';
9 Elsif Updating Then
10 l_Dmlsql := 'UPDATE TEST SET name=' || :New.Name || ' where id=' || :Old.Id || ' ;';
11 Elsif Deleting Then
12 l_Dmlsql := 'DELETE test WHERE id=' || :Old.Id || ' ;';
13 End If;
14 Insert Into script (script, tablename, rundate) Values (l_Dmlsql, 'TEST', Sysdate);
15 End;
16 /

Trigger created

SQL>

--测试

SQL> insert into test values(1,'aa');

1 row inserted

SQL> commit;

Commit complete

SQL> insert into test values(2,'bb');

1 row inserted

SQL> update test set name='xy' where id=2;

1 row updated

SQL> delete test;

2 rows deleted

SQL> commit;

Commit complete

SQL> select * from script;

SCRIPT TABLENAME RUNDATE
-------------------------------------------------------------------------------- -------------------- -----------
insert into test(id,name) values(1,aa); TEST 2006-6-15 1
insert into test(id,name) values(2,bb); TEST 2006-6-15 1
UPDATE TEST SET name=xy where id=2 ; TEST 2006-6-15 1
DELETE test WHERE id=1 ; TEST 2006-6-15 1
DELETE test WHERE id=2 ; TEST 2006-6-15 1

SQL>

注意:这里没有对具体的数据类型作处理.可以另写函数实现.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/104152/viewspace-139932/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/104152/viewspace-139932/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值