建立触发器 如果表的某一列发生改变 将修改的新旧信息写到另外一个表中

是oracle数据库... 是oracle数据库 展开
 我来答
wangzhiqing999
2010-09-27 · TA获得超过1.6万个赞
知道大有可为答主
回答量:7048
采纳率:100%
帮助的人:3356万
展开全部
楼主啥数据库?
Oracle 和 SQL Server 处理机制不一样的。

Oracle

通过
OF 字段 ON 表
实现只针对特定列的触发。

FOR EACH ROW 表示这个触发器为 行级触发器。

测试表:
SQL> CREATE TABLE test_trigger_table (
2 id INT,
3 name VARCHAR(10),
4 val INT
5 );

Table created.

SQL> CREATE OR REPLACE TRIGGER BeforeUpdateTest
2 BEFORE INSERT OR UPDATE OF val ON test_trigger_table
3 FOR EACH ROW
4 BEGIN
5 dbms_output.put_line('BEFORE UPDATE val ON test_trigger_table ');
6 dbms_output.put_line('Old val = ' || :old.val);
7 dbms_output.put_line('New val = ' || :new.val);
8 END;
9 /

Trigger created.

SQL>
SQL> INSERT INTO test_trigger_table(id, name, val) VALUES (1, 'ABC', 1);
BEFORE UPDATE val ON test_trigger_table
Old val =
New val = 1

1 row created.

SQL>
SQL> UPDATE test_trigger_table SET name = 'XYZ' WHERE id=1;

1 row updated.

SQL>
SQL> UPDATE test_trigger_table SET val = 20 WHERE id=1;
BEFORE UPDATE val ON test_trigger_table
Old val = 1
New val = 20

1 row updated.

-----------------------------
假如有一个日志记录表 叫 test_trigger_log
有6个字段。
分别存储 更新前 与 更新后:

所有字段更新都触发

CREATE OR REPLACE TRIGGER BeforeUpdateTest
BEFORE UPDATE ON test_trigger_table
FOR EACH ROW
BEGIN

INSERT INTO test_trigger_log (oldid, oldname, oldval, newid, newname, newval)
VALUES(:old.id, :old.name, :old.val, :new.id, :new.name, :new.val);

END;
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式