请教触发器通过dblink更新数据发生异常的处理方法

[复制链接]
查看11 | 回复5 | 2012-10-9 18:16:00 | 显示全部楼层 |阅读模式
有如下触发器,当向远程数据库更新数据发生异常时,该怎么捕获异常。有没有一种异常可以代替所有的,类似于java中的Exception,本人不是很懂,不知道这样问是否合适,请大家帮帮忙
create or replace trigger tr_AQSC_COMPANY_insupd
after INSERT ORupdate on company
for each row

DECLARE
iCount int;
begin
select count(*) into iCount fromCOMPANY@ODSDBLINK where id=:new.id;
if iCount>0 then
updateCOMPANY@ODSDBLINK set NAME=:new.Name,Type=:new.Type,Remark=:NEW.REMARK,SHORT_NAME=:NEW.SHORT_NAME,LAST_UPDATE_DATE=sysdate
where id=:new.ID;
else
insert into COMPANY@ODSDBLINK
(ID,NAME,TYPE,REMARK,SHORT_NAME) values(:NEW.ID,:NEW.NAME,:NEW.TYPE,:NEW.REMARK,:NEW.SHORT_NAME);
end if;
end tr_AQSC_COMPANY_insupd;

回复

使用道具 举报

千问 | 2012-10-9 18:16:00 | 显示全部楼层
create or replace trigger lv_urban_topay_tmp_jy
before insert  
on lv_urban_topay_tmp for each row  
begin

if :new.indi_id=7281840 then

null;
end if;
Exception

When Others Then--Exception有多种

Null;--这里是你对异常的处理
end;

回复

使用道具 举报

千问 | 2012-10-9 18:16:00 | 显示全部楼层
eclare
v_empno cust.empno%type;
v_ename cust.ename%TYPE;
v_job cust.job%type;
v_sal cust.sal%TYPE;
begin
select ename,job,sal into v_ename, v_job, v_sal from cust where empno='1'
exception
when NO_DATA_FOUND
dbms_output.put_line('编码不存在');
when TOO_MANY_ROWS then
abms_output.put_line('查找的记录过多');
when others then
abms_output.put_line('其他异常');
end
自定义异常
Declare
v_sal cust.sal%type;
sal_Exception exception;
begin
select avg(sal) into v_sal from cust;
if v_age>2000 then
Raise sal_exception
else
dbms_output.put_line(v_sal);
end if;
exception
when sal_Exception then
Raise_application_error(-20005,'员工工资有点高');
end;
回复

使用道具 举报

千问 | 2012-10-9 18:16:00 | 显示全部楼层
eric0435 发表于 2012-12-12 15:19
eclare
v_empno cust.empno%type;
v_ename cust.ename%TYPE;

如果出现异常的话,能隔一段时间再执行一遍吗
回复

使用道具 举报

千问 | 2012-10-9 18:16:00 | 显示全部楼层
llbupt 发表于 2012-12-12 15:48
如果出现异常的话,能隔一段时间再执行一遍吗


触发器不是job啊,如果长时间占用,岂不是会出现锁的状况?
回复

使用道具 举报

千问 | 2012-10-9 18:16:00 | 显示全部楼层
这种需求不要用触发器,用定时刷新的物化视图。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行