Spracherkennung für: .test vermutete Sprache: SQL {SQL[92] Shell[60] ADA[46]} [Methode: maximale Elemente, drei Dimensionen]
--echo #
--echo # MDEV-39518 Allow prepared statements in stored functions in assignment right hand
--echo #
--echo #
--echo # MDEV-40315 Executing dynamic SQL (via PS) bypasses ERROR ER_SP_NO_RETSET
--echo #
--echo #
--echo # EXECUTE IMMEDIATE 'SELECT..' is not OK
--echo #
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES (1),(2),(3);
DELIMITER $$;
CREATE FUNCTION f_sel() RETURNS INT
BEGIN
EXECUTE IMMEDIATE 'SELECT a FROM t1';
RETURN 0;
END;
$$
CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT f_sel();
END;
$$
DELIMITER ;$$
--error ER_SP_NO_RETSET
CALL p();
DROP PROCEDURE p;
DROP FUNCTION f_sel;
DROP TABLE t1;
--echo #
--echo # PREPARE 'SELECT..' + EXECUTE is not OK
--echo #
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES (1),(2),(3);
DELIMITER $$;
CREATE FUNCTION f_sel() RETURNS INT
BEGIN
PREPARE stmt FROM 'SELECT a FROM t1';
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
RETURN 0;
END;
$$
CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT f_sel();
END;
$$
DELIMITER ;$$
--error ER_SP_NO_RETSET
CALL p();
DROP PROCEDURE p;
DROP FUNCTION f_sel;
DROP TABLE t1;
--echo #
--echo # SELECT .. UNION is not OK
--echo #
DELIMITER $$;
CREATE FUNCTION f_sel() RETURNS INT
BEGIN
EXECUTE IMMEDIATE 'SELECT 1 AS c1 UNION SELECT 2';
RETURN 0;
END;
$$
CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT f_sel();
END;
$$
DELIMITER ;$$
--error ER_SP_NO_RETSET
CALL p();
DROP PROCEDURE p;
DROP FUNCTION f_sel;
--echo #
--echo # DELETE RETURNING is not OK
--echo #
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES (1),(2),(3);
DELIMITER $$;
CREATE FUNCTION f_sel() RETURNS INT
BEGIN
EXECUTE IMMEDIATE 'DELETE FROM t1 WHERE a>=2 RETURNING a';
RETURN 0;
END;
$$
CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT f_sel();
END;
$$
DELIMITER ;$$
--error ER_SP_NO_RETSET
CALL p();
DROP PROCEDURE p;
DROP FUNCTION f_sel;
DROP TABLE t1;
--echo #
--echo # UPDATE RETURNING is not OK
--echo #
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES (1),(2),(3);
DELIMITER $$;
CREATE FUNCTION f_sel() RETURNS INT
BEGIN
EXECUTE IMMEDIATE 'UPDATE t1 SET a=a+10 RETURNING a';
RETURN 0;
END;
$$
CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT f_sel();
END;
$$
DELIMITER ;$$
--error ER_SP_NO_RETSET
CALL p();
DROP PROCEDURE p;
DROP FUNCTION f_sel;
DROP TABLE t1;
--echo #
--echo # SELECT INTO @var is OK
--echo #
SET @a=NULL;
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES (1),(2),(3);
DELIMITER $$;
CREATE FUNCTION f_sel() RETURNS INT
BEGIN
EXECUTE IMMEDIATE 'SELECT MAX(a) INTO @a FROM t1';
RETURN 0;
END;
$$
CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT f_sel();
END;
$$
DELIMITER ;$$
CALL p();
SELECT @a;
SET @a=NULL;
DROP PROCEDURE p;
DROP FUNCTION f_sel;
DROP TABLE t1;
--echo #
--echo # INSERT .. SELECT is OK
--echo #
CREATE TABLE t1(a INT);
CREATE TABLE t2 LIKE t1;
INSERT INTO t1 VALUES (1),(2),(3);
DELIMITER $$;
CREATE FUNCTION f_sel() RETURNS INT
BEGIN
EXECUTE IMMEDIATE 'INSERT INTO t2 SELECT * FROM t1';
RETURN 0;
END;
$$
CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT f_sel();
SELECT * FROM t2;
END;
$$
DELIMITER ;$$
CALL p();
DROP PROCEDURE p;
DROP FUNCTION f_sel;
DROP TABLE t2;
DROP TABLE t1;
--echo # End of 13.1 tests
[Dauer der Verarbeitung: 0.14 Sekunden, vorverarbeitet 2026-10-08]