存儲過程異常的信息
⑴ 請教各位高手 oracle 存儲過程 如何獲得 捕獲異常的內容
--通過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來截取,否則輸出很難看。
**/
⑵ oracle 存儲過程發生異常錯誤執行的exception有日誌記錄么
一般我們會創建一張表用於記錄所有異常信息,再寫一個過程來處理(截取部分信息)並存儲異常信息(包括發生異常的過程、觸發器名稱、異常信息、發生時間等),然後在整個資料庫開發中,所有異常處理中調用該過程。這樣可以隨時查看那裡出了問題。
⑶ 如何獲取存儲過程中的錯誤信息
FUNCTION mysql_error does NOT exist,不行呀,哪個知道怎麼弄
⑷ oracle存儲過程異常信息
begin
[sql code]
exception
when others then
rollback;
v_err:=sqlerrm; --這里接收異常信息
end;
⑸ 如何在sqlserver 的函數或存儲過程中拋出異常。
try...catch
⑹ mysql存儲過程怎麼獲取異常信息
DECLARE handler_type HANDLER FOR condition_value[,...] sp_statement
其中,
handler_type的取值范圍:CONTINUE | EXIT | UNDO
condition_value的取值范圍:SQLSTATE [VALUE] sqlstate_value | condition_name | SQLWARNING | NOT FOUND | SQLEXCEPTION | mysql_error_code
這個語句指定每個可以處理一個或多個條件的處理程序。如果產生一個或多個條件,指定的語句被執行。 對一個CONTINUE處理程序,當前子程序的執行在執行處理程序語句之後繼續。對於EXIT處理程序,當前BEGIN...END復合語句的執行被終止。UNDO 處理程序類型語句還不被支持。
· SQLWARNING是對所有以01開頭的SQLSTATE代碼的速記。
· NOT FOUND是對所有以02開頭的SQLSTATE代碼的速記。
· SQLEXCEPTION是對所有沒有被SQLWARNING或NOT FOUND捕獲的SQLSTATE代碼的速記。
註:除了SQLSTATE值,MySQL錯誤代碼也不被支持。
例:
delimiter $$
CREATE TABLE `_t1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`val1` varchar(20) DEFAULT NULL,
`val2` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=113 DEFAULT CHARSET=latin1$$
DELIMITER $$
CREATE DEFINER=`abandonship`@`%` PROCEDURE `P_TestException`()
BEGIN
declare _var,_err int default 0;
⑺ plsql怎麼看存儲過程的錯誤(信息)日誌
右鍵test,對存儲過程進行測試!可以用變數記錄錯誤信息,用異常捕捉來報告這個變數里記錄的錯誤信息。
當然,也可以使用自己的錯誤日誌表來記錄具體錯誤原因,錯誤代碼,方便查找錯誤原因。
⑻ 如何讓存儲過程拋出異常
你說的異常是什麼意思?如果是,執行中的錯誤,那麼可以用「調試」,不過需要有一個系統許可權的擁護才能調試,許可權好象是什麼debug XXXXX。 如果說的是有時執行因為這樣那樣的數據問題出現的異常,那麼一般都是通過exception來拋出異常的,這樣的拋出的異常,你可以自己編代碼,然後輸入一張表內,這樣就可以捕獲異常了。如果1表示沒有主鍵,2表示數據超長等等。具體的寫法網上很多,這里就不寫了。
⑼ oracle存儲過程,如何獲得詳細的錯誤信息
create or replace procere 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 存儲過程異常處理
先建一個錯誤跟蹤表
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 procere 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;