+ -
当前位置:首页 → 问答吧 → 触发器问题?

触发器问题?

时间:2011-12-19

来源:互联网

我有一个表,结构如下:
t1
f1 varchar2(20) pk,
f2 varchar2(20),
f3 varchar2(20),
f4 varchar2(20),
f5 varchar2(20),
f6 varchar2(20),
f7 varchar2(20)

我想对t1做一个触发器:
CREATE OR REPLACE TRIGGER t1_tri
  after INSERT OR UPDATE
  ON t1 FOR EACH ROW
BEGIN

  tttt(:NEW.f1);
END;


tttt如下所示:
procedure tttt(p_val in varchar2)
is
begin
insert into t2(f1,f2,f3,f4,f5,f6,f7)
select f1,f2,f3,f4,f5,f6,f7
from t1
where f1=p_val;
end;

当对t1进行update时,报错:
表t1发生变化,触发器/函数不能读取它。
如何解决啊?多谢高手指点!

作者: vbagcl   发布时间: 2011-12-19

首先有点疑惑,就是t1触发这个触发器,要在t2中插入数据,为什么还要单独写一个存储过程呢?
直接在触发器代码中插入即可。

其次,如下代码有问题:
SQL code

insert into t2(f1,f2,f3,f4,f5,f6,f7)
select f1,f2,f3,f4,f5,f6,f7
from t1
where f1=p_val;



先执行insert, f1到f7变量没定义
select语句没有into子句,不允许。

作者: LuiseRADL   发布时间: 2011-12-19

多谢1楼的指点,其实,我就是举个例子,实际运用肯定不是这样的。
其实我就是想做一个触发器,但触发器触发的程序又要从触发器的当前表中读取数据,不知道是否能实现。
就好像我的例子类似的功能。

作者: vbagcl   发布时间: 2011-12-19