主頁 > 資料庫 > MySql 如何獲取例外的訊息(比如oracle的sqlerrm 或 sqlserver 的 ERROR_MESSAGE())
MySql 如何獲取例外的訊息(比如oracle的sqlerrm 或 sqlserver 的 ERROR_MESSAGE())
2020-09-14 12:38:57資料庫
--1.在oracle里,寫一個存盤程序(獲取例外訊息)
create procedure xxx ()
as
begin
...
exception
when others then
dbms_output('例外代碼:'||SQLCODE ||' 例外資訊:'||SQLERRM);
END;
--2.在sqlserver 里,寫一個存盤程序(獲取例外訊息)
create procedure xxx ()
as
begin
.....
BEGIN CATCH
SELECT @Msg=錯誤訊息:' + ERROR_MESSAGE();
END CATCH
END
--得到完成資訊的例子:
BEGIN TRY
-- Generate a divide-by-zero error.
SELECT 1/0;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
------------
但是在mysql中,好像沒有類似的方法直接獲取 系統自帶的 例外代碼 和 例外資訊;
好像沒有;
--在mysql獲取例外的例子
create procedure xxx (p_json varchar2(2000) , out p_msg varchar(200))
begin
......
DECLARE Invalid_JSON CONDITION FOR 3141 ; --314是json格式不對;
DECLARE EXIT HANDLER FOR Invalid_JSON
BEGIN
set @errorMsg ='決議json錯誤' -- 只能自己手寫錯誤資訊,不能用類似oracle的 MESSAGE_TEXT 或 sqlserver 的 ERROR_MESSAGE();
END;
SET @cnt= JSON_LENGTH(p_Json); --獲取json陣列的個數,如果json格式不對,就會觸發 3141這個例外;
...
END;
uj5u.com熱心網友回復:
condition_value:
SQLSTATE [VALUE] sqlstate_value
| condition_name | SQLWARNING | NOT FOUND | SQLEXCEPTION | mysql_error_code
uj5u.com熱心網友回復:
多謝樓上兄弟的幫助,我也看過這樣的說明。但是好像達不到oracle或sqlserver那種效果;
uj5u.com熱心網友回復:
用exit handler
MariaDB [demo]> delimiter $$
MariaDB [demo]> create or replace procedure print_exception_msg()
-> begin
-> declare exit handler for sqlexception
-> begin
-> declare code varchar(5) default '00000';
-> declare msg text;
-> get diagnostics condition 1 code = returned_sqlstate, msg = message_text;
-> select concat('[', code, '] ', msg);
-> end;
-> select * from a;
-> select 'should not be executed';
-> end;
-> $$
Query OK, 0 rows affected (0.04 sec)
**桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......
我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......
關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......