要保證不中斷,需要用游標,單個記錄進行插入,異常記錄插入錯誤信息表
創新互聯專注于武川網站建設服務及定制,我們擁有豐富的企業做網站經驗。 熱誠為您提供武川營銷型網站建設,武川網站制作、武川網頁設計、武川網站官網定制、重慶小程序開發服務,打造武川網絡公司原創品牌,更為您提供武川網站排名全網營銷落地服務。
declare
begin
for rec in (select * from b) loop
begin
insert into a
select * from b where ...;
exception when otherst then
insert into err_msg
select * from b where ...;
end;
end loop;
end;
很顯然在p2中 異常exp1沒有定義,而p1中 exp1進行過初始化, 所以p1認識exp1,erp2不認識(將其當做其它)
你可以給exp1定義一個異常號碼,這樣在p2中截獲異常時通過對異常號碼進行判斷。
或者把他們放到一個oracle包中,將exp1 定義為 包變量,這樣p1中初始化過exp1,p2中也可以使用了。
先建一個錯誤跟蹤表
create sequence s_error_id;
CREATE TABLE ERROR_RECORD
(
ERROR_ID NUMBER(10) primary key,
ERROR_CODE NUMBER(10),
ERROR_MSG VARCHAR2(2000),
ERROR_DATE DATE,
ERROR_PROGRAM VARCHAR2(200)
);
--------在過程的例外里向跟蹤表寫入錯誤信息:
create or replace procedure day_task is
v_sqlcode ERROR_RECORD.ERROR_CODE%type;
v_msg ERROR_RECORD.error_msg%type;
begin
------program body
exception when others then
--記錄錯誤信息表
v_sqlcode :=sqlcode;
v_msg :=sqlerrm;
insert into error_record(error_code,error_msg,error_date,error_program)
values (v_sqlcode,v_msg,sysdate,‘day_task’);
end;
異常是執行這個存儲過程出的異常吧,那就是說只有執行一次這個存儲過程才會拋一次異常么?如果這樣我建議你可以再寫個存儲過程來調用你這個存儲過程,這樣來記錄異常的次數。然后再進行處理!
新聞名稱:oracle如何寫異常處理,Oracle異常
標題網址:http://m.newbst.com/article36/hsejpg.html
成都網站建設公司_創新互聯,為您提供外貿網站建設、做網站、服務器托管、網站排名、面包屑導航、外貿建站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯