如何在触发器中获取SQL语句和执行前的值

没有用过什么触发器,弄一个弄的纠结啊createorreplacetriggercredit3.tri_updateafterupdateofinfo2oncom_bas... 没有用过什么触发器 ,弄一个弄的纠结啊
create or replace trigger credit3.tri_update
after update of info2 on com_base for each row
begin
update aptitude set info2='1'where aptitude.companyid=com_base.id;
end;
我想在更新com_base 中info2=‘1’是更新aptitude中的数据,但是这个where aptitude.companyid=com_base.id;条件获得上面执行的com_base.id怎么获取啊?
谢谢各位了
oracle数据库,我是希望当com_base更新这info2字段时,根据当前更新的这个com_base的id
更新aptitude,所以条件where aptitude.companyid=com_base.id;
展开
 我来答
匿名用户
2013-03-25
展开全部
目测语法是 Oracle 数据库的语法。

那么, 如果这个where aptitude.companyid=com_base.id;条件获差祥得上面执行的com_base.id怎么获取啊?虚腔搏

可以通过 :old.id 或者 :new.id 来获取。

例圆销如:

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

Trigger created.
SQL>
SQL> UPDATE test_trigger_table SET name = 'XYZ' WHERE id = 1;
BEFORE UPDATE
Old Name = ABC
New Name = XYZ

1 row updated.
追问
你这个:new 和 :old只对触发后要执行的aptitude表可以吧,好像不行,上面那个com_base的id获取不了
追答
update aptitude set info2='1'where aptitude.companyid=com_base.id;

修改为

update aptitude set info2='1' where aptitude.companyid= :new.id;

即可
猪熊打架
2013-03-25 · TA获得超过160个赞
知道小有建树答主
回答量:296
采纳率:0%
帮助的人:201万
展开全部
是什么数据库啊?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友3d5e870
2013-03-25
知道答主
回答量:40
采纳率:0%
帮助的人:7.7万
展开全部
desc 表面
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式