一个触发器使用游标的问题!
需求的在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...