用触发器实现update,谁帮帮我。。。

YOULOVEXIA 2010-07-12 02:33:47
数据库表名mrzbxx ,有字段obj1,obj2,obj3,当系统中插入一条数据时。
触发器实现update,使obj3=obj1+obj2.
请各位帮帮我....
...全文
156 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
YOULOVEXIA 2010-07-18
  • 打赏
  • 举报
回复
确实是5楼的就OK了,谢谢咯。
我的问题解决了!
minitoy 2010-07-14
  • 打赏
  • 举报
回复
贴下试验的过程,楼主可以参考下
SQL> DROP TABLE test;

Table dropped

SQL>
SQL> CREATE TABLE test
2 (a NUMBER(2));

Table created

SQL>
SQL> CREATE OR REPLACE TRIGGER TR_TEST
2 AFTER INSERT ON TEST
3 FOR EACH ROW
4 DECLARE
5 v_count NUMBER(2);
6 pragma autonomous_transaction;
7 BEGIN
8
9 SELECT COUNT(*) INTO v_count FROM test WHERE a=:new.a;
10 IF v_count>0 THEN
11 UPDATE test SET a=:new.a+1 WHERE a=:new.a;
12 END IF;
13 COMMIT;
14 END TR_TEST;
15 /

Trigger created

SQL> insert into test values(1);

1 row inserted

SQL> select * from test;

A
---
1

SQL> insert into test values(1);

1 row inserted

SQL> select * from test;

A
---
1
1

SQL> commit;

Commit complete

SQL> insert into test values(1);

1 row inserted

SQL> select * from test;

A
---
2
2
1

SQL> commit;

Commit complete

SQL> select * from test;

A
---
2
2
1

SQL>
minitoy 2010-07-14
  • 打赏
  • 举报
回复
恩,楼主的问题好像不能用触发器实现,不用自治事务的情况下,不能对本表进行操作。使用了自治事务,因为insert语句还没commit,update只能update insert之前的数据记录,当前正在插入的记录是没法update的。
还有,我不明白的就是,为什么不在insert语句中写obj3=obj1+obj2?
minitoy 2010-07-14
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 da21 的回复:]
5楼的就已OK啦!
[/Quote]
5楼的好像会报ORA-04084
da21 2010-07-14
  • 打赏
  • 举报
回复
5楼的就已OK啦!
YOULOVEXIA 2010-07-13
  • 打赏
  • 举报
回复
以上办法我试过了,还是不行呀。第一种方法提示:OLD,NEW不允许出现在表级触发器中
minitoy 2010-07-13
  • 打赏
  • 举报
回复
mark
cosio 2010-07-13
  • 打赏
  • 举报
回复
create or replace trigger tri_tb before insert on mrzbxx for each row
declare
pragma autonomous_transaction;--表内自更新要加
begin
update mrzbxx set obj3=:new.obj1+:new.obj2 where :old.obj1=:new.obj1 and :old.obj2=:new.obj2;
end;
小灰狼W 2010-07-13
  • 打赏
  • 举报
回复
create or replace trigger tri_tb before insert on mrzbxx for each row
begin
:new.obj3:=:new.obj1+:new.obj2;
end;

hangchengxiaoli 2010-07-13
  • 打赏
  • 举报
回复
干吗要触发器里来解决这个问题吗?
qinfei008 2010-07-13
  • 打赏
  • 举报
回复
另外for each row触发器不允许对本表进行操作,只能用 old和new
qinfei008 2010-07-13
  • 打赏
  • 举报
回复
直接:new.obj3:=:new.obj1+:new.obj2; 这个就行了,要where语句干啥
hexie008 2010-07-13
  • 打赏
  • 举报
回复
LZ的需求不够明确
心中的彩虹 2010-07-12
  • 打赏
  • 举报
回复
字符相连接

update mrzbxx set obj3=:new.obj1||:new.obj2 where :old.obj1=:new.obj1 and :old.obj2=:new.obj2;

心中的彩虹 2010-07-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 youlovexia 的回复:]
数据库表名mrzbxx ,有字段obj1,obj2,obj3,当系统中插入一条数据时。
触发器实现update,使obj3=obj1+obj2.
请各位帮帮我....
[/Quote]
你的是字段相加还是把两个字符连接起来.

create or replace trigger tri_tb before insert on mrzbxx for each row
declare
pragma autonomous_transaction;
begin
update mrzbxx set obj3=:new.obj1+:new.obj2 where :old.obj1=:new.obj1 and :old.obj2=:new.obj2;
end;




Phoenix_99 2010-07-12
  • 打赏
  • 举报
回复
create or replace trigger tr_trigger_mrzbxx
after insert on mrzbxx
declare
begin
update mrzbxx set obj3=obj1||obj2 where obj1 = :old.obj1 and obj2 = :old.obj2;
commit;
end tr_trigger_mrzbxx;

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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