Details
-
Bug
-
Status: Open (View Workflow)
-
Major
-
Resolution: Unresolved
-
5.5, 10.0, 10.1, 10.2, 10.3
-
None
Description
This script erroneously returns a row:
DROP PROCEDURE IF EXISTS p1; |
DELIMITER $$
|
CREATE PROCEDURE p1() |
BEGIN
|
DECLARE a INT DEFAULT -1; |
SELECT 1 FROM DUAL LIMIT a; |
END; |
$$
|
DELIMITER ;
|
CALL p1;
|
+---+
|
| 1 |
|
+---+
|
| 1 |
|
+---+
|
Note, if I rewrite the query using a prepared statement with a negative user variable, it correctly returns an error:
DROP PROCEDURE IF EXISTS p1; |
DELIMITER $$
|
CREATE PROCEDURE p1() |
BEGIN
|
SET @a=-1; |
PREPARE stmt FROM 'SELECT 1 FROM DUAL LIMIT ?'; |
EXECUTE stmt USING @a; |
END; |
$$
|
DELIMITER ;
|
CALL p1;
|
ERROR 1210 (HY000): Incorrect arguments to EXECUTE
|
Note, If in the version 10.2 or higher (which support any kind of expressions in PS parameters) I use a prepared statement with a negative SP variable, it also correctly returns an error:
DROP PROCEDURE IF EXISTS p1; |
DELIMITER $$
|
CREATE PROCEDURE p1() |
BEGIN
|
DECLARE a INT DEFAULT -1; |
PREPARE stmt FROM 'SELECT 1 FROM DUAL LIMIT ?'; |
EXECUTE stmt USING a; |
END; |
$$
|
DELIMITER ;
|
CALL p1;
|
ERROR 1210 (HY000): Incorrect arguments to EXECUTE
|