需求的在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||', 就 有问题了 应该怎么调用 字段名呢?
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||', 就 有问题了 应该怎么调用 字段名呢?
Oracle|Sybase|DB2
SQL Server|MySQL
(以Oracle为主)
这句用dynamic SQL试试
open tmpCur for 'select decode(:new.' || cur1.column_name||',Null,1,0) into v_count from dual';
fetch...into...
doing something...
要是可以我就直接Execute Immediate 了