犯迷糊了

范佩西_11 2008-10-23 09:28:51
我有表test(a,b,c)三个字段都是number型的。我想做一个触发,当插入c列值则设置当前行的a列值为c*0.25我简单的写的触发。编译是对的。但插入一个新数据就报错
不知道是逻辑错误还是什么错误。
create or replace trigger tr
after insert or update of c on test
for each row
begin
insert into test (a) values(:new.c*0.25);
end;

...全文
87 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
codearts 2008-10-23
  • 打赏
  • 举报
回复
你更新了表,after触发器中就不能再去读触发器的基表了。
范佩西_11 2008-10-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 oracledbalgtu 的回复:]
SQL codeCREATEORREPLACETRIGGERTR
BEFOREINSERTORUPDATEOFCONTESTFOREACH ROWBEGIN:new.a:=:NEW.C*0.25;END;/引用楼主 linzhangs 的帖子:
我有表test(a,b,c)三个字段都是number型的。我想做一个触发,当插入c列值则设置当前行的a列值为c*0.25我简单的写的触发。编译是对的。但插入一个新数据就报错
不知道是逻辑错误还是什么错误。

SQL codecreate or replace trigger tr
after insert or update of  c on test
for …
[/Quote]是这样的。
但有两个疑点为啥用before不用after,还有必须加个update,如果这样子INSERT OF C
会编译错误。
oracledbalgtu 2008-10-23
  • 打赏
  • 举报
回复
CREATE OR REPLACE TRIGGER TR
BEFORE INSERT OR UPDATE OF C ON TEST
FOR EACH ROW
BEGIN
:new.a:=:NEW.C * 0.25;
END;
/
[Quote=引用楼主 linzhangs 的帖子:]
我有表test(a,b,c)三个字段都是number型的。我想做一个触发,当插入c列值则设置当前行的a列值为c*0.25我简单的写的触发。编译是对的。但插入一个新数据就报错
不知道是逻辑错误还是什么错误。

SQL codecreate or replace trigger tr
after insert or update of c on test
for each row
begin
insert into test (a) values(:new.c*0.25);
end;
[/Quote]

17,377

社区成员

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

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