需求的在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||', 就 有问题了 应该怎么调用 字段名呢?

解决方案 »

  1.   

    是啊 哪有什么别的写法 :new后边只能直接写 :new.ID这种的?
      

  2.   

    哎 不行只能 写好多个decode了 不错那样维护起来麻烦啊
      

  3.   

    有Oracle工作经验两年的请进群:37204725主要讨论:
    Oracle|Sybase|DB2
    SQL Server|MySQL
    (以Oracle为主)
      

  4.   

    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...
      

  5.   

    :new 要显示使用的在‘’里不行的吧
    要是可以我就直接Execute Immediate 了