请教各位一个oracle 触发器的问题.

Spr_Perfei 2009-03-12 11:57:23
create or replace trigger updateA
after update on A
for each row
begin
if :old.AA != :new.AA then
begin
update B set AA=:new.AA where id=:old.id;
end;
end if;

if :old.BB != :new.BB then
begin
update B set BB=:new.BB where id=:old.id;
end;
end if;

end;




两个表 A.(id,AA,BB) B(id,AA,BB)
更新A表 触发器更新B表.

请教:
为什么我更新1个字段的时候可以完成. 只更新AA 或者 只 更新BB 都可以完成.
但是 如果我 一次更新2 个字段 update A set AA='11',BB='22' where id=1, 却只更新了 B 表的 AA 字段.为什么啊?

该怎么写这个触发器呢. 谢谢
...全文
76 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcs_1 2009-03-12
  • 打赏
  • 举报
回复
这样试试,注意红色的部分

create or replace trigger updateA
after update of aa,bb on A
for each row
begin
if :old.AA != :new.AA then
begin
update B set AA=:new.AA where id=:old.id;
end;
end if;

if :old.BB != :new.BB then
begin
update B set BB=:new.BB where id=:old.id;
end;
end if;

end;
Spr_Perfei 2009-03-12
  • 打赏
  • 举报
回复
谢谢 , 这样也可以. 非常感谢了.


但是 那样做的的话. 有办法吗?
Andy__Huang 2009-03-12
  • 打赏
  • 举报
回复
你这相触发器应该这样写好一些!
create or replace trigger updateA
after update on A
for each row
begin
if :old.AA != :new.AA or :old.BB != :new.BB then
begin
update B set AA=:new.AA,BB=:new.BB where id=:old.id;
end;
end if;
end;

只用一个update语句就好了
zcs_1 2009-03-12
  • 打赏
  • 举报
回复
字符串转数字类型用TO_NUMBER,但是要注意如果字符串不是数字,如'a1'等,转换时会出错
Spr_Perfei 2009-03-12
  • 打赏
  • 举报
回复
不能沉啊 不能沉啊.
Spr_Perfei 2009-03-12
  • 打赏
  • 举报
回复
如果我想把 AA 和 BB 的值加起来 然后再更新 B 的AA .
AA 和 BB 是 字符型的.
应该怎么转下类型呢? 转成 num 的.?

谢谢了.

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧