一个比较畸歪的PL/SQL问题

appleqiuxd 2007-07-10 05:03:42
各位大虾,小弟有问题请教:

某个表的字段,会有很多个,如:
INT_COL1
INT_COL2
INT_COL3
.
.
.INT_COL100

在触发器中 有没有方法可以动态比较下面(伪代码)语句
condition:
':new.INT_COL'||i|| '<> : old.INT_COL' ||i
其中index是变量,从1,2……100

即是类似用循环实现下面的效果:
: new.INT_COL1<> : old.INT_COL1
: new.INT_COL2<> : old.INT_COL2
.
.
.
: new.INT_COL100<> : old.INT_COL100

-----------------------------------------------------------
另外我的思路是:

execute immediate 'select t.dummy from dual where :new.INT_COL'||i||'<>:old.INT_COL'||i
into compare_result;
if compare_result = 'Y' then
……

或者

execute immediate 'select t.dummy from dual t where \:new.INT_COL1 <> \:old.INT_COL1 escape :esc_name '
into compare_result
using '\';
if compare_result = 'Y' then
……

但是非常遗憾的是,执行起来都是错误,我精疲力竭了,望各位大虾救救我,谢谢了:)
...全文
207 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mayongzhi 2007-07-11
  • 打赏
  • 举报
回复
应该可以,这会儿在家没环境,明天在公司试一下
appleqiuxd 2007-07-11
  • 打赏
  • 举报
回复
分享一下调试触发器的方法:
我们在plsql developer,可以建立一个测试存储过程,执行到可以触发触发器的sql时,断点跟入step into便可进入触发器。
看到怎么兄弟,帮忙,好感动,我以后会经常来的,谢谢:)
appleqiuxd 2007-07-11
  • 打赏
  • 举报
回复
不瞒各位大哥,这是小弟第一次写触发器,还真不知道如何调试,我先来个exception 瞅瞅,是怎么报错的,见笑了:)
bobfang 2007-07-11
  • 打赏
  • 举报
回复
写个脚本,自动生成触发器中:NEW.COLi<>:OLD.COLi的语句。
KingSunSha 2007-07-11
  • 打赏
  • 举报
回复
应该不行的,在触发器中引用旧值和新值必须使用显式列名。
在用execute immediate执行
select t.dummy from dual where :new.INT_COL1<>:old.INT_COL1
的时候,Oracle把这句查询看作简单的字符串分析而不会把:new.INT_COL1和:old.INT_COL1值传入。
KingSunSha 2007-07-11
  • 打赏
  • 举报
回复
错误信息是什么?你的触发器中有没有exception控制?

3,492

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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