注册

从oracle中迁移过来的触发器报错无法执行(通过命令编译正常,是否有什么代码指令调试工具,tools的触发器调试工具有问题)

初心 2024/06/11 360 1 已解决

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8
【操作系统】:centos7
【CPU】:x86
【问题描述】*:从oracle中迁移过来的触发器报错无法执行,报错:有歧义的列名ID。手动创建触发器执行正常。
触发器ddl语句如下:
create or replace trigger "RSMDATA"."TR_BI_RISK_ASSESS_EXTRA"
before INSERT
on "RSMDATA"."RISK_ASSESS_EXTRA"
referencing OLD ROW AS "OLD" NEW ROW AS "NEW"
for each row
declare
v_trigger_user varchar2(100);
v_trigger_date date;
cursor c_switch(cp_switch RSMTRIG.rsm_tr_switch.switch_for%type) is
select status from RSMTRIG.rsm_tr_switch
where trigger_name = 'TR_BI_RISK_ASSESS_EXTRA'
and switch_for = cp_switch;
v_status RSMTRIG.rsm_tr_switch.status%type;
v_sqlcode varchar2(6);
v_sqlerrm varchar2(200);
v_error_comment varchar2(300);
v_seq varchar2(20);
v_seq_no varchar2(20);
v_flag varchar2(10);
v_message varchar2(400);
v_seq2 varchar2(20);
v_flag2 varchar2(10);
v_message2 varchar2(400);
begin
v_error_comment:='before get_user';
v_trigger_user := pub_sys_package.get_user();
v_trigger_date := sysdate;

--需求来源:SLIS数据同步
--功能描述:seq自动生成流水号;
--对pk_serial的写入放在公共部分,不允许屏蔽,不得擅自改动
v_error_comment:='before pk_serial';
if :new.DETAIL_ID is null then
rsmcde.rsm_seq_package.get_seq('RISK_ASSESS_EXTRA', 'DETAIL_ID', 'RSMDATA',v_seq, v_flag, v_message );
if v_flag <> '1' then
raise_application_error(-20510,'RISK_ASSESS_EXTRA.DETAIL_ID对应的seq值出现异常:'||v_message);
end if;
:new.DETAIL_ID := v_seq;
end if;

rsmcde.rsm_seq_package.get_seq('RISK_ASSESS_EXTRA', 'PK_SERIAL', 'RSMDATA',v_seq, v_flag, v_message );
if v_flag <> '1' then
raise_application_error(-20510,'RISK_ASSESS_EXTRA.PK_SERIAL对应的seq值出现异常:'||v_message);
end if;
:new.pk_serial := v_seq;

v_error_comment:='before RSM_SYNCH';
open c_switch('RSM_SYNCH'); --获取子功能控制信息
fetch c_switch into v_status;
if c_switch%FOUND and v_status = '1' then
:new.created_user := v_trigger_user;
:new.created_date := v_trigger_date;
:new.updated_user := v_trigger_user;
:new.updated_date := v_trigger_date;
end if;
close c_switch;

--出错处理
exception
when others then
v_sqlcode :=sqlcode;
v_sqlerrm :=substr(sqlerrm,1,200);
insert into RSMTRIG.rsm_tr_error_log
(error_no , --系统错误代码
error_message , --系统错误信息
trigger_name , --出错的trigger
trigger_user , --出错的用户
trigger_date , --出错的时间
error_comment --出错详细信息
)

values
(v_sqlcode,
v_sqlerrm,
'TR_BI_RISK_ASSESS_EXTRA',
v_trigger_user,
v_trigger_date,
v_error_comment
);

end;

image.png

回答 0
暂无回答
扫一扫
联系客服