Sign-up....

表变异,触发器/函数不能读???

我用erwin建了两个表A( F1(pk), F2 ) 和 B( F2(pk),F3 ),其中B表通过F2字段和A表有一个

null allows的non-identifying relationship,也就是说A表的F2或者在B中存在,或者为null.

erwin生成oracle表A、B和触发器TI_A、TU_A.

TI_A是当向A表insert后触发的逐行触发器

TU_A是从A表update后触发的逐行触发器

这两个触发器的内容一样,就是当添加或修改后,判断新的F2是否在B表中存在,如果不存在,

就将A表的F2设置为NULL.

DECLARE numrows INTEGER;

begin

update A

set

A.F2 = NULL

where

not exists (

select * from B

where

:new.F2 = B.F2

)

;

end;

但出现“表变异,触发器/函数不能读”的错误,如何解决?

触发器是erwin自动生成的,没改过

[525 byte] By [msdn] at [2007-8-14 15:34:41]
# 1 Re: 表变异,触发器/函数不能读???

看是不是要重新编译一下

ern at 2004-8-12 11:56:05 >
# 2 Re: 表变异,触发器/函数不能读???

表B是约束表

不可以读取或者修改约束表的primary列

wylwyl1130 at 2004-8-12 12:24:53 >
# 3 Re: 表变异,触发器/函数不能读???

既然你写了这个触发器了,去掉那个约束吧,反正功能一样

如果不然,你就写一个包,一个(before)语句级触发器和一个(after)行级触发器来实现

语句级触发器吧B中F2的内容写进一个全局变量(用包实现,pl/sql表),行级触发器来实现判断

wylwyl1130 at 2004-8-12 12:36:02 >
# 4 Re: 表变异,触发器/函数不能读???

如果行级触发导致了变异表不能读,那可能要改为两个触发器了.

dinya2003 at 2004-8-13 15:03:21 >
# 5 Re: 表变异,触发器/函数不能读???

谢谢各位问答,erwin生成的trigger看来有很多问题,它竟然在trigger里生成这样

的逻辑:

if

...

where

....

end if

还有就是句子后面加了"and",编译根本通不过

结账

xujiaqiang at 2004-8-13 17:46:23 >

Oracle

All Classified