#
# MDEV-39518 Allow prepared statements in stored functions in assignment right hand
#
#
# MDEV-40315 Executing dynamic SQL (via PS) bypasses ERROR ER_SP_NO_RETSET
#
#
# EXECUTE IMMEDIATE 'SELECT..' is not OK
#
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES (1),(2),(3);
CREATE FUNCTION f_sel() RETURNS INT
BEGIN
EXECUTE IMMEDIATE 'SELECT a FROM t1'; RETURN0;
END;
$$
CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT f_sel();
END;
$$
CALL p(); ERROR0A000: Not allowed to return a result set from a function
DROP PROCEDURE p;
DROP FUNCTION f_sel;
DROP TABLE t1;
#
# PREPARE 'SELECT..' + EXECUTE is not OK
#
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES (1),(2),(3);
CREATE FUNCTION f_sel() RETURNS INT
BEGIN
PREPARE stmt FROM 'SELECT a FROM t1';
EXECUTE stmt;
DEALLOCATE PREPARE stmt; RETURN0;
END;
$$
CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT f_sel();
END;
$$
CALL p(); ERROR0A000: Not allowed to return a result set from a function
DROP PROCEDURE p;
DROP FUNCTION f_sel;
DROP TABLE t1;
#
# SELECT .. UNION is not OK
#
CREATE FUNCTION f_sel() RETURNS INT
BEGIN
EXECUTE IMMEDIATE 'SELECT 1 AS c1 UNION SELECT 2'; RETURN0;
END;
$$
CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT f_sel();
END;
$$
CALL p(); ERROR0A000: Not allowed to return a result set from a function
DROP PROCEDURE p;
DROP FUNCTION f_sel;
#
# DELETE RETURNING is not OK
#
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES (1),(2),(3);
CREATE FUNCTION f_sel() RETURNS INT
BEGIN
EXECUTE IMMEDIATE 'DELETE FROM t1 WHERE a>=2 RETURNING a'; RETURN0;
END;
$$
CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT f_sel();
END;
$$
CALL p(); ERROR0A000: Not allowed to return a result set from a function
DROP PROCEDURE p;
DROP FUNCTION f_sel;
DROP TABLE t1;
#
# UPDATE RETURNING is not OK
#
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES (1),(2),(3);
CREATE FUNCTION f_sel() RETURNS INT
BEGIN
EXECUTE IMMEDIATE 'UPDATE t1 SET a=a+10 RETURNING a'; RETURN0;
END;
$$
CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT f_sel();
END;
$$
CALL p(); ERROR0A000: Not allowed to return a result set from a function
DROP PROCEDURE p;
DROP FUNCTION f_sel;
DROP TABLE t1;
#
# SELECT INTO @var is OK
# SET @a=NULL;
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES (1),(2),(3);
CREATE FUNCTION f_sel() RETURNS INT
BEGIN
EXECUTE IMMEDIATE 'SELECT MAX(a) INTO @a FROM t1'; RETURN0;
END;
$$
CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT f_sel();
END;
$$
CALL p();
SELECT @a;
@a 3 SET @a=NULL;
DROP PROCEDURE p;
DROP FUNCTION f_sel;
DROP TABLE t1;
#
# INSERT .. SELECT is OK
#
CREATE TABLE t1(a INT);
CREATE TABLE t2 LIKE t1;
INSERT INTO t1 VALUES (1),(2),(3);
CREATE FUNCTION f_sel() RETURNS INT
BEGIN
EXECUTE IMMEDIATE 'INSERT INTO t2 SELECT * FROM t1'; RETURN0;
END;
$$
CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT f_sel();
SELECT * FROM t2;
END;
$$
CALL p();
a 1 2 3
DROP PROCEDURE p;
DROP FUNCTION f_sel;
DROP TABLE t2;
DROP TABLE t1;
# End of 13.1 tests
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.1 Sekunden
(vorverarbeitet am 2026-10-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.