/**
**名称:修改单,QC同步触发器
**功能:修改单修改后,QC信息同步 ,以提供前台展现
**created by fanqd @ 2010/12/26
**/
create or replace trigger modifysynchronizeqc
after update on tb_support_modify
Referencing old as old new as newValue
for each row
declare
var_out1 VARCHAR(255);
var_out2 VARCHAR(255);
BEGIN
SELECT u.objname INTO var_out1 FROM tb_support_userinfo u WHERE u.objno=:newValue.MODIFIER;
SELECT v.MODULE_NAMES INTO var_out2 FROM vw_modify_active v WHERE v.MODIFY_ID=:newValue.MODIFY_ID;
UPDATE DEFAULT_质保单导入测试_.Req@QC114 t
SET t.RQ_USER_25 = '修改原因:'||:newValue.MODIFY_REASON||'/n 修改说明:'||:newValue.MODIFY_DESC||'/n 修改文件及路径:'||:newValue.MODIFY_FILE||:newValue.PROGRAM_PATH||'/n 修改表结构信息:'||:newValue.TABLE_MODIFY
, --修改信息
t.RQ_USER_26 = :newValue.SELF_TEST_DESC, --单元测试记录
t.RQ_USER_27 = '测试要点及建议:'||:newValue.TEST_SUGGESTION||'/n 上线步骤:'||:newValue.PUBLISH_DESC,
--测试要点及上线步骤
t.RQ_REQ_TYPE = decode(:newValue.TEST_TYPE,1,'现场测试','测试室测试'),
t.RQ_USER_04 = var_out1, --修改人
t.rq_user_01 = var_out2 --模块
WHERE t.rq_user_23 = :newValue.PRODUCT_ID
AND t.rq_user_22 = :newValue.modify_num;
end modifysynchronizeqc;
执行的时候报错,如下:
ORA-04091:表XX发生了变化,触发器/函数不能读它
问题原因:
在于过程中用:newValue.MODIFY_ID再次去查目标表,这一动作被oracle认为是不合法的。
目标表的记录行如果做了更新,无需再通过ID去查询目标记录行。这一动作被oracle认为是不合法的。
/**
**名称:修改单,QC同步触发器
**功能:修改单修改后,QC信息同步 ,以提供前台展现
**created by fanqd @ 2010/12/26
**/
create or replace trigger modifysynchronizeqc
after update on tb_support_modify
Referencing old as old new as newValue
for each row
declare
var_out1 VARCHAR(255);
var_out2 VARCHAR(255);
BEGIN
SELECT u.objname INTO var_out1 FROM tb_support_userinfo u WHERE u.objno=:newValue.MODIFIER;
SELECT WMSYS.WM_CONCAT(v.module_name) INTO var_out2 FROM tb_support_module v WHERE v.parent_id=:newValue.MODIFY_ID;
UPDATE DEFAULT_质保单导入测试_.Req@QC114 t
SET t.RQ_USER_25 = '修改原因:'||:newValue.MODIFY_REASON||'/n 修改说明:'||:newValue.MODIFY_DESC||'/n 修改文件及路径:'||:newValue.MODIFY_FILE||:newValue.PROGRAM_PATH||'/n 修改表结构信息:'||:newValue.TABLE_MODIFY, --修改信息
t.RQ_USER_26 = :newValue.SELF_TEST_DESC, --单元测试记录
t.RQ_USER_27 = '测试要点及建议:'||:newValue.TEST_SUGGESTION||'/n 上线步骤:'||:newValue.PUBLISH_DESC,
--测试要点及上线步骤
t.RQ_REQ_TYPE = decode(:newValue.TEST_TYPE,1,'现场测试','测试室测试'),
t.RQ_USER_04 = var_out1, --修改人
t.rq_user_01 = var_out2 --模块
WHERE t.rq_user_23 = :newValue.PRODUCT_ID
AND t.rq_user_22 = :newValue.modify_num;
end modifysynchronizeqc;