请帮忙看看这个存储过程

[复制链接]
查看11 | 回复0 | 2007-9-26 18:42:10 | 显示全部楼层 |阅读模式
需要实现以下目的,请大家帮帮忙
1,根据指定的时间将与T表相互关联的两个表(T1,T2)的数据插入到远程数据库中
2,然后再将T表中满足条件的数据插入到远程数据库中
3,删除T,T1,T2中已经插入到远程数据库中的数据
4,要求这1~3步中只要有1步出问题就需要全部“回滚”
5,如果有异常发生,通过LOG_ERROR表来记录错误信息。
6,对于P,P1,P2三个表的处理同(步骤1~步骤5)

CREATEPROCEDURE trans_data(v_date date)
IS
CURSOR t_cursor IS
SELECTid from T where t_data<v_date;
BEGIN
for t_record in t_cursor loop
INSERT INTO t1@remote_database select * from t1 where t1.id=t_record.id;
INSERT INTO t2@remote_database select * from t2 where t2.id=t_record.id;
INSERT INTO t@remote_database select * from t where t.id=t_record.id;
delete from t1 where t1.id=t_record.id;
deletefrom t2 where t2.id=t_record.id;
delete from t where t.id=t_record.id;
end loop;

CURSOR p_cursor IS
SELECTid from P where p_data<v_date;
for p_record in p_cursor loop
INSERT INTO p1@remote_database select * from p1 where p1.id=p_record.id;
INSERT INTO p2@remote_database select * from p2 where p2.id=p_record.id;
INSERT INTO p@remote_database select * from p where p.id=p_record.id;
delete from p1 where p1.id=p_record.id;
deletefrom p2 where p2.id=p_record.id;
delete from p where p.id=p_record.id;
end loop;

EXCEPTION
WHEN OTHERS THEN
err_num := SQLCODE;
err_msg := SUBSTR(SQLERRM, 1, 1000);
INSERT INTO LOG_ERROR VALUES ('WARNING! trans_dataNOT complete at '||TO_CHAR(SYSDATE,'yyyy/mm/dd hh24:mi:ss')||''||err_num||''||err_msg);
COMMIT;
END trans_data;
/
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行