#
# MDEV-39518 Allow prepared statements in stored functions in assignment right hand
#
# p1, p2(default), f3(immediate)
CREATE TABLE t1 (a INT);
CREATE FUNCTION f3_immediate() RETURNS INT
BEGIN
EXECUTE IMMEDIATE 'INSERT INTO t1 VALUES (10)'; RETURN ROW_COUNT();
END;
$$
CREATE PROCEDURE p2_default()
BEGIN
DECLARE nrows INT DEFAULT f3_immediate();
SELECT nrows;
END;
$$
CREATE PROCEDURE p1()
BEGIN
CALL p2_default;
END;
$$
CALL p1;
nrows 1
CALL p1;
nrows 1
SELECT * FROM t1 ORDER BY a;
a 10 10
DROP FUNCTION f3_immediate;
DROP PROCEDURE p2_default;
DROP PROCEDURE p1;
DROP TABLE t1;
# p1, p2(default), f3a(immediate) + f3b(immediate)
CREATE TABLE t1 (a INT);
CREATE FUNCTION f3a_immediate() RETURNS INT
BEGIN
EXECUTE IMMEDIATE 'INSERT INTO t1 VALUES (10)'; RETURN ROW_COUNT();
END;
$$
CREATE FUNCTION f3b_immediate() RETURNS INT
BEGIN
EXECUTE IMMEDIATE 'INSERT INTO t1 VALUES (11)'; RETURN ROW_COUNT();
END;
$$
CREATE PROCEDURE p2_default()
BEGIN
DECLARE nrows_a INT DEFAULT f3a_immediate();
DECLARE nrows_b INT DEFAULT f3b_immediate();
SELECT nrows_a, nrows_b;
END;
$$
CREATE PROCEDURE p1()
BEGIN
CALL p2_default;
END;
$$
CALL p1;
nrows_a nrows_b 11
SELECT * FROM t1 ORDER BY a;
a 10 11
CALL p1;
nrows_a nrows_b 11
SELECT * FROM t1 ORDER BY a;
a 10 10 11 11
DROP FUNCTION f3a_immediate;
DROP FUNCTION f3b_immediate;
DROP PROCEDURE p2_default;
DROP PROCEDURE p1;
DROP TABLE t1;
# p1, p2(set), f3(immediate)
CREATE TABLE t1 (a INT);
CREATE FUNCTION f3_immediate() RETURNS INT
BEGIN
EXECUTE IMMEDIATE 'INSERT INTO t1 VALUES (10)'; RETURN ROW_COUNT();
END;
$$
CREATE PROCEDURE p2_set()
BEGIN
DECLARE a INT; SET a=f3_immediate();
SELECT * FROM t1;
END;
$$
CREATE PROCEDURE p1()
BEGIN
CALL p2_set();
END;
$$
CALL p1();
a 10
CALL p1();
a 10 10
DROP FUNCTION f3_immediate;
DROP PROCEDURE p2_set;
DROP PROCEDURE p1;
DROP TABLE t1;
# p1, p2(default), f3(direct_immediate+direct)
CREATE TABLE t1 (a INT);
CREATE FUNCTION f1_direct_immediate_direct() RETURNS INT
BEGIN
-- A mixture of direct and prepared execution
DECLARE nrows INT DEFAULT 0;
INSERT INTO t1 VALUES(10); SET nrows= nrows + ROW_COUNT();
EXECUTE IMMEDIATE 'INSERT INTO t1 VALUES (20)'; SET nrows= nrows + ROW_COUNT();
INSERT INTO t1 VALUES(30); SET nrows= nrows + ROW_COUNT(); RETURN nrows;
END;
$$
CREATE PROCEDURE p2_default()
BEGIN
DECLARE nrows INT DEFAULT f1_direct_immediate_direct();
SELECT nrows;
END;
$$
CREATE PROCEDURE p1()
BEGIN
CALL p2_default;
END;
$$
CALL p1;
nrows 3
SELECT * FROM t1 ORDER BY a;
a 10 20 30
CALL p1;
nrows 3
SELECT * FROM t1 ORDER BY a;
a 10 10 20 20 30 30
DROP FUNCTION f1_direct_immediate_direct;
DROP PROCEDURE p2_default;
DROP PROCEDURE p1;
DROP TABLE t1;
# End of 13.1 tests
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.12 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.