0
(第一篇文章。很抱歉,如果我違反任何海關或協議)。存儲過程SQLWARNING退出處理程序不會被調用
我要定義在我的存儲過程中引發的任何SQLWARNING退出處理。但處理程序正在被忽略,它從不會發生。我很困惑。
我正在使用MariaDB v。10.0.23。不過,我已經在MariaDB v 10.1.14上測試了這個,並得到了相同的結果。
下面是創建測試數據庫的SQL。
CREATE DATABASE testerrorhandling;
USE testerrorhandling;
CREATE TABLE test
(
int_notnull INT NOT NULL
);
DELIMITER //
CREATE DEFINER=CURRENT_USER PROCEDURE create_record
(
IN p INT
)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
SELECT 'Handler for SQLEXCEPTION fired.';
DECLARE EXIT HANDLER FOR SQLWARNING
SELECT 'Handler for SQLWARNING fired.';
INSERT INTO test (int_notnull) VALUES (p);
END;
//
DELIMITER ;
如果我試圖添加一個空值,該過程將調用正確的處理函數。
MariaDB [testerrorhandling]> call create_record(null);
+---------------------------------+
| Handler for SQLEXCEPTION fired. |
+---------------------------------+
| Handler for SQLEXCEPTION fired. |
+---------------------------------+
1 row in set (0.00 sec)
但現在,如果我嘗試添加非整數值,警告被拋出,但SQLWARNING錯誤處理程序永遠不會觸發。值爲0存儲在test
表中。
MariaDB [testerrorhandling]> call create_record('this is not an integer');
Query OK, 1 row affected, 1 warning (0.04 sec)
MariaDB [testerrorhandling]> show warnings;
+---------+------+---------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------------------------------------+
| Warning | 1366 | Incorrect integer value: 'this is not an integer' for column 'p' at row 1 |
+---------+------+---------------------------------------------------------------------------+
1 row in set (0.00 sec)
這不是我所期望或渴望的。我必須做錯什麼。我在這裏錯過了什麼?