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)
这不是我所期望或渴望的。我必须做错什么。我在这里错过了什么?