當前位置:首頁 » 存儲配置 » 存儲過程捕獲異常

存儲過程捕獲異常

發布時間: 2022-07-18 01:42:45

㈠ MYsql 存儲過程 中怎麼捕獲異常

DECLARE處理程序的使用:

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錯誤代碼也不被支持。


例:

[sql]viewplainprint?
delimiter$$

CREATETABLE`_t1`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`val1`varchar(20)DEFAULTNULL,
`val2`int(11)DEFAULTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDBAUTO_INCREMENT=113DEFAULTCHARSET=latin1$$
[sql]viewplainprint?
DELIMITER$$

CREATEDEFINER=`abandonship`@`%`PROCEDURE`P_TestException`()
BEGIN
declare_var,_errintdefault0;
,sqlwarning,notfoundset_err=1;
insertinto_t1(val1,val2)value(2012,'abandonship');
if_err=1then
set_var=2;
endif;

selectcasewhen_var=2then'出錯了'else_varend;

調用該存儲過程將返回:出錯了

㈡ db2如何捕獲存儲過程異常

TRUNCATETABLEoutput_debugIMMEDIATE@
BEGIN
--DB2中,如果需要使用sqlcode,那麼必須先DECLARE以後,才能使用。
DECLAREsqlcodeINT;
P1:BEGINATOMIC
--定義錯誤處理
--如果發生錯誤,結束處理,並回滾前面做的處理。
DECLAREUNDOHANDLER
FOR
SQLEXCEPTION
BEGIN
--異常處理
INSERTINTOoutput_debugVALUES('出錯啦!'||TO_CHAR(sqlcode));
END;
--先更新.
UPDATEtest_mainSETvalue='Test3'WHEREid=1;
--插入一行主鍵重復數據.
INSERTINTOtest_mainVALUES(1,'PK');
INSERTINTOoutput_debugVALUES('本語句不會執行到!');
ENDP1;
END
@
db2=>select*fromtest_mainWHEREid=1@
IDVALUE
---------------------
1Test2
1條記錄已選擇。
db2=>select*fromoutput_debug@
DATA
----------------------------------------
出錯啦!-803

㈢ 請教各位高手 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 存儲過程如何捕獲特定異常

條件改成下面的。
if sqlcode=-1427

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

可以先定義個變數,發生異常的時候將異常信息賦值給變數,插入表的時候用變數,
日誌表沒給表結構,我自己重新定義了一個,測試ok。
CREATE TABLE T_LOG_ERROR
(ERR_ID NUMBER,
ERR_TIME DATE,
ERR_CODE NUMBER,
ERR_INFOR VARCHAR2(4000)
);

create or replace procere p_testone is
v number(2);
v_sqlcode number;
v_sqlerrm varchar2(4000);
begin
select 1 / 0 into v from al;

--異常處理
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了。

㈥ 求助,存儲過程如何捕獲異常後繼續執行,

這個要看異常捕捉處理程序放在哪,從出現異常到異常處理之間的程序應該是不執行的

㈦ 存儲過程怎麼捕捉違反唯一性約束的異常

BEGIN TRY---------------------開始捕捉異常
...
END TRY-----------結束捕捉異常
BEGIN CATCH------------有異常被捕獲
-----------異常處理,一般有事務先回滾
IF @@TRANCOUNT > 0---------------判斷有沒有事務
BEGIN
ROLLBACK TRAN----------回滾事務
END
....
END CATCH--------結束異常處理

㈧ 怎樣判斷存儲過程出錯並捕捉錯誤信息

--通過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來截取,否則輸出很難看。

**/

㈨ 如何讓存儲過程拋出異常

你說的異常是什麼意思?如果是,執行中的錯誤,那麼可以用「調試」,不過需要有一個系統許可權的擁護才能調試,許可權好象是什麼debug XXXXX。 如果說的是有時執行因為這樣那樣的數據問題出現的異常,那麼一般都是通過exception來拋出異常的,這樣的拋出的異常,你可以自己編代碼,然後輸入一張表內,這樣就可以捕獲異常了。如果1表示沒有主鍵,2表示數據超長等等。具體的寫法網上很多,這里就不寫了。

熱點內容
直出伺服器怎麼樣 發布:2024-10-07 15:41:36 瀏覽:476
比亞迪唐dmi哪個配置性價比 發布:2024-10-07 15:19:28 瀏覽:901
編譯器按變數 發布:2024-10-07 15:07:03 瀏覽:773
怎麼忘記電腦wifi密碼怎麼辦 發布:2024-10-07 15:02:18 瀏覽:424
安卓開發java開發 發布:2024-10-07 15:01:29 瀏覽:94
工業級安卓主板價格怎麼樣 發布:2024-10-07 14:07:57 瀏覽:628
編程先乘除 發布:2024-10-07 13:58:45 瀏覽:270
編譯內核時發生循環編譯 發布:2024-10-07 13:58:43 瀏覽:497
當下筆記本電腦什麼配置好 發布:2024-10-07 12:57:33 瀏覽:471
安卓倒車軌跡怎麼調 發布:2024-10-07 12:54:47 瀏覽:916