Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/MariaDB/mysql-test/main/   (MariaDB Server Version 8.1-8.4©)  Datei vom 1.9.2026 mit Größe 2 kB image not shown  

Quelle  ps_in_func-package.test  Sprache: unbekannt

 
Spracherkennung für: .test vermutete Sprache: SQL {SQL[90] ABAP[54] ADA[54]} [Methode: maximale Elemente, drei Dimensionen]

--echo #
--echo # MDEV-39518 Allow prepared statements in stored functions in assignment right hand
--echo #

--echo #
--echo # MDEV-40288 PACKAGE BODY initialization section that contains dynamic SQL fails with ER_NO_SUCH_TABLE for a table that exists
--echo #

--echo #
--echo # Calling PS in the package instantiating section is not allowed from a function
--echo #

SET sql_mode=ORACLE;
SET @px_cnt=NULL;
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (1);
DELIMITER $$;
CREATE PACKAGE pkg1 AS
  FUNCTION f RETURN INT;
END;
$$
CREATE PACKAGE BODY pkg1 AS
  FUNCTION f RETURN INT AS
  BEGIN
    RETURN 42;
  END;
BEGIN
  EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM t1 INTO @px_cnt';
END;
$$
CREATE PROCEDURE p1() AS
  v INT;
BEGIN
  v := pkg1.f();
END;
$$
DELIMITER ;$$
--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
CALL p1();
DROP PROCEDURE p1;
DROP PACKAGE pkg1;
DROP TABLE t1;
SELECT @px_cnt;

--echo #
--echo # Calling PS in the package instantiating section is OK from a procedure
--echo #

SET sql_mode=ORACLE;
SET @px_cnt=NULL;
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (1);
DELIMITER $$;
CREATE PACKAGE pkg1 AS
  PROCEDURE p1;
END;
$$
CREATE PACKAGE BODY pkg1 AS
  PROCEDURE p1 AS BEGIN
    SET @a=10;
  END;
BEGIN
  EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM t1 INTO @px_cnt';
END;$$
CREATE PROCEDURE p1() AS
  v INT;
BEGIN
  CALL pkg1.p1;
END;
$$
DELIMITER ;$$
CALL p1();
DROP PROCEDURE p1;
DROP PACKAGE pkg1;
DROP TABLE t1;
SELECT @px_cnt;
SET sql_mode=DEFAULT;


--echo #
--echo # A function with dynamic SQL instantiates a package body
--echo #

SET sql_mode=ORACLE;
CREATE TABLE t1 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, a VARCHAR(32));

DELIMITER $$;
CREATE PACKAGE pkg1 AS
  FUNCTION f1() RETURN INT;
END;
$$
CREATE PACKAGE BODY pkg1 AS
  FUNCTION f1() RETURN INT AS
  BEGIN
    EXECUTE IMMEDIATE 'INSERT INTO t1 (a) VALUES(''func pkg1.f1'')';
    RETURN ROW_COUNT();
  END;
BEGIN
  INSERT INTO t1 (a) VALUES ('package body pkg1');
END;
$$

CREATE PROCEDURE p1 AS
  a INT;
BEGIN
  a:= pkg1.f1();
  SELECT a;
END;
$$

DELIMITER ;$$
CALL p1;
SELECT * FROM t1 ORDER BY id;

DROP PROCEDURE p1;
DROP PACKAGE pkg1;
DROP TABLE t1;
SET sql_mode=DEFAULT;


--echo # End of 13.1 tests

[Dauer der Verarbeitung: 0.18 Sekunden, vorverarbeitet 2026-10-08]