日期:2014-05-17  浏览次数:20747 次

一个触发器使用游标的问题!
需求的在insert和update时候计算出这条记录的空值数量修改这个记录的一个字段

CREATE   OR   REPLACE   TRIGGER   COUNT_SCENE_FILEPRINT
before   INSERT   OR   UPDATE
ON   SCENE_FILE_EVIDENCE
FOR   EACH   ROW
declare
pragma   autonomous_transaction;
v_count   Number   :=0;
v_count1   Number   :=0;
sqltext   Varchar2(1000);
Cursor   cur   Is   Select   COLUMN_NAME   From   USER_TAB_COLUMNS   Where   TABLE_NAME   =   'SCENE_FILE_EVIDENCE ';  
begin  
if   inserting   then
For   cur1   In   cur   Loop
select   decode(:new. '||cur1.column_name|| ',Null,1,0)   into   v_count   from   dual;  
v_count1   :=   v_count1   +   v_count;
End   Loop;
:new.SERIAL_NO   :=   v_count1;
commit;
end   if;
end;

这个问题搞了几天了还是没搞好
首先游标返回得到   表的字段
由于   触发器使用:new   必须是显示的   所有不能Execute   Immediate
在   调用   游标的   返回的字段名的:new. '||cur1.column_name|| ',   就   有问题了   应该怎么调用   字段名呢?

------解决方案--------------------
不可以那样写。
------解决方案--------------------
又是动态SQL的问题
------解决方案--------------------
select decode(:new. '||cur1.column_name|| ',Null,1,0) into v_count from dual;
这句用dynamic SQL试试
open tmpCur for 'select decode(:new. ' || cur1.column_name|| ',Null,1,0) into v_count from dual ';
fetch...into...
doing something...