oracle如何循环列,Oracle PL/SQL:动态循环触发器列

触发器内部我试图遍历表上的所有列,并将新值与旧值进行比较。以下是我迄今为止:Oracle PL/SQL:动态循环触发器列

CREATE OR REPLACE TRIGGER "JOSH".TEST#UPD BEFORE

UPDATE ON "JOSH"."TEST_TRIGGER_TABLE" REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW

declare

oldval varchar(2000);

newval varchar(2000);

begin

for row in (SELECT column_name from user_tab_columns where table_name='TEST_TRIGGER_TABLE') loop

execute immediate 'select :old.'||row.column_name||' from dual' into oldval;

execute immediate 'select :new.'||row.column_name||' from dual' into newval;

--Do something here with the old and new values

end loop;

end;

触发编译,但是当触发火灾,我越来越:

ORA-01008:并非所有变量绑定

在第一次立即执行,因为它的值为:old。 :old和:new已被定义为触发器的一部分,但看起来立即执行不能看到这些变量。

是否有办法动态地迭代触发器中的列值?

+1

只有在指定触发器为FOR EACH ROW时,才能使用旧的和新的关键字。 –

2009-04-24 17:02:21

+0

正确的是“FOR EACH ROW”。问题是我试图在动态sql语句中引用它们。 –

2009-04-24 17:04:09

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值