oracle儲存過程如何獲得詳細的錯誤資訊

2022-03-09 14:15:50 字數 6098 閱讀 9206

1樓:

create or replace procedure proc_test( strage in string, strname in string, ret_code out string, v_error_message out string) is

begin

declare

strsql varcchar(1024);

v_error_desc varcchar(1024);

begin

v_error_desc :='student';

strsql :='select name from student where age=100';

execute immediate strsql using strage ;

v_error_desc :='teacher';

strsql :='select age from teacher where name=jill';

execute immediate strsql using strname ;

ret_code:=0;

v_error_desc :='ok';

v_error_message:='ok';

exception

when others then

ret_code := sqlcode;

v_error_desc := '錯誤位置:' || v_error_desc;

v_error_message := sqlerrm;

rollback;

end;

end proc_cancel_digital_id;

2樓:弋心空

用oracle的企業管理器em,在那個裡面執行pl/sql就能看到錯誤的具體資訊了

請教各位高手 oracle 儲存過程 如何獲得 捕獲異常的內容

3樓:

--通過sqlcode , sqlerrm 這兩個內建變數來檢視,例如:

declare

--宣告異常

some_kinds_of_err exception; -- exception to indicate an error condition

v_errorcode number; -- variable to hold the error message code

v_errortext varchar2(200); -- variable to hold the error message text

begin

--...

--丟擲異常

if ( ... ) then --(括號內填丟擲異常的條件)

raise some_kinds_of_err;

end if;

--...

exception

--捕捉異常

when some_kinds_of_err then

/* do something to handler the errors */

null;

--捕捉其他異常,並獲得 捕獲異常的內容

when others then

v_errorcode := sqlcode;

v_errortext := substr(sqlerrm, 1, 200);

-- note the use of substr here.

dbms_output.put_line(v_errorcode || '::'||v_errortext);

end;

//**

sqlcode 就是錯誤**

sqlerrm 就是sql錯誤資訊。注意用substr來擷取,否則輸出很難看。**/

4樓:石亮東

begin

plsql語句串;

exception when othersthen

dbms_output.put_line(sqlcode||' '|| sqlerrm);

end;

oracle如何捕獲儲存過程報錯是哪一行

5樓:流浪雲風

如果資料庫是10g及以上版本,可以使用dbms_utility.format_error_backtrace(),這個函式能夠返回錯誤行,可以套用以下格式:

create or replace procedure prc_test(引數) is

v_no number;

begin

select no into v_no from zrp;

exception

when others then

dbms_output.put_line('sql code:'||sqlcode||chr(10)||

sqlerrm||chr(10)||

dbms_utility.format_error_backtrace());

end;

這樣寫的好處是,當程式發成異常,唄exception捕獲後,就會列印出錯誤資訊及發生錯誤的行號

6樓:鱷魚的_眼淚

show errors

oracle怎麼檢視儲存過程報錯資訊

7樓:匿名使用者

create or replace procedure proc_test( strage in string, strname in string, ret_code out string, v_error_message out string) is

begin

declare

strsql varcchar(1024);

v_error_desc varcchar(1024);

begin

v_error_desc :='student';

strsql :='select name from student where age=100';

execute immediate strsql using strage ;

v_error_desc :='teacher';

strsql :='select age from teacher where name=jill';

execute immediate strsql using strname ;

ret_code:=0;

v_error_desc :='ok';

v_error_message:='ok';

exception

when others then

ret_code := sqlcode;

v_error_desc := '錯誤位置:' || v_error_desc;

v_error_message := sqlerrm;

rollback;

end;

end proc_cancel_digital_id;

oracle 儲存過程錯誤怎麼檢視

8樓:智者總要千慮

可用第三方工具檢查錯誤。

如以下儲存過程:

其中第六行故意少寫了一個分號。

然後執行後,會提示完成,這時可以去左邊的樹中找到這個儲存過程,顯示是有個紅叉的。

這時,可以右鍵,選擇編輯。

然後開啟頁面的最下方會顯示如下資訊。

此時滑鼠雙擊資訊的那一行,會在上方儲存過程中以特殊顏色顯示,這就說明,有特殊顏色的位置有錯誤,可以根據ora-00933的錯誤號查詢錯誤原因,並加以修改。

現在,如果可以後邊的逗號補上,點執行,然後,下邊會顯示成功編譯且左邊的樹紅叉消除。

請教各位高手 oracle 儲存過程 如何將獲得捕獲異常的內容寫入一張表裡

9樓:丿弒丶九天灬

總結起來你的問題就是在sqlerrm這個內建函式上,它應該被變數賦值,這樣才能使用,sql語句中,不能直接使用,sqlerrm,sqlcode這種

10樓:

可以先定義個變數,發生異常的時候將異常資訊賦值給變數,插入表的時候用變數,

日誌表沒給表結構,我自己重新定義了一個,測試ok。

create table t_log_error

(err_id number,

err_time date,

err_code number,

err_infor varchar2(4000)

);create or replace procedure p_testone is

v number(2);

v_sqlcode number;

v_sqlerrm varchar2(4000);

begin

select 1 / 0 into v from dual;

--異常處理

exception when others then

rollback;

v_sqlcode :=sqlcode;

v_sqlerrm :=substr(sqlerrm, 1, 2000);

insert into t_log_error values(1,sysdate,v_sqlcode,v_sqlerrm);

commit;

dbms_output.put_line(substr(sqlerrm, 1, 200));

end;

執行儲存過程後就可以把異常資訊記錄到表t_log_error了。

oracle 儲存過程異常處理

11樓:匿名使用者

先建一個錯誤跟蹤表

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;

12樓:匿名使用者

create or replace procedure day_task is

l_err varhcar2(1000);

begin

update table set aaa='aaa' where tableid=1;

--正確的,

exception

when others then

如果錯誤出有個sqlerrm。把它儲存就知道錯誤了l_err := substr(sqlerrm, 1, 100);

insert into error_tablevalues

('標識', l_err, current_date);

raise;

end;

create table error_table(idf varhcar2(50),

err_mag varchar2(500),date date);

oracle儲存過程怎麼寫迴圈,oracle 儲存過程兩個for迴圈 怎麼寫

寫迴圈的操作方法和步驟如下 1 第一步,編寫儲存過程的整體結構,然後定義變數,見下圖。2 其次,完成上述步驟後,在定義變數後定義遊標,begin,select sysdate into v date from dual,end test proc,如下圖所示。3 接著,完成上述步驟後,寫一個for迴...

oracle的儲存過程is和as什麼區別

使用過vba嗎?儲存過程裡的procedure 相當於 sub 無返回值 儲存過程裡的function 相當於 function 必須有回值 oracle儲存過程中,is和as有什麼區別 在儲存過程 procedure 和函式 function 中沒有區別 在檢視 view 中只能用as不能用is ...

oracle的儲存過程怎麼呼叫有out值引數的儲存過程

mysql教程4 mysql8運算子 函式 儲存過程及新增資料型別 17.之建立帶有in和out引數的儲存過程 學習猿地 oracle中如何定義一個使用out引數的儲存過程 mysql教程4 mysql8運算子 函式 儲存過程及新增資料型別 17.之建立帶有in和out引數的儲存過程 學習猿地 ou...