Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  sp-cursor-for-ps.test  Sprache: unbekannt

 
Spracherkennung für: .test vermutete Sprache: SQL {SQL[66] Lisp[55] Masm[55]} [Methode: maximale Elemente, drei Dimensionen]

SET NAMES utf8mb3;
SET sql_mode=ORACLE;

--echo #
--echo # MDEV-39022 Add `LOCAL spvar` syntax for prepared statements and SYS_REFCURSORs
--echo #

# OPEN strict_cursor_variable FOR PREPARE stmt - not supported

DELIMITER $$;
--error ER_WRONG_USAGE
CREATE PROCEDURE p1 AS
  TYPE rec0_t IS RECORD (a INT, b INT);
  TYPE cur0_t IS REF CURSOR RETURN rec0_t;
  c0 cur0_t;
BEGIN
  PREPARE stmt FROM 'SELECT 1,2';
  OPEN c0 FOR PREPARE stmt;
END;
$$
DELIMITER ;$$


# OPEN c FOR PREPARE stmt - a working example

DELIMITER $$;
CREATE PROCEDURE p1 AS
  v0 TEXT;
  c0 SYS_REFCURSOR;
BEGIN
  PREPARE stmt FROM 'SELECT 123';
  OPEN c0 FOR PREPARE stmt;
  FETCH c0 INTO v0;
  CLOSE c0;
  SELECT v0;
END;
$$
DELIMITER ;$$
CALL p1;
DROP PROCEDURE p1;


# OPEN c FOR PREPARE stmt - allowed in a stored function with restrictions
# OK when used as an assignment right hand

DELIMITER $$;
CREATE FUNCTION f1() RETURN INT AS
  c0 SYS_REFCURSOR;
BEGIN
  OPEN c0 FOR PREPARE stmt;
  CLOSE c0;
  RETURN 0;
END;
$$
DELIMITER ;$$
--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
SELECT f1();
DELIMITER $$;
CREATE PROCEDURE p1 AS
  a INT;
BEGIN
  a:= f1();
END;
$$
DELIMITER ;$$
PREPARE stmt FROM 'SELECT 1,2';
CALL p1;
DEALLOCATE PREPARE stmt;
DROP PROCEDURE p1;
DROP FUNCTION f1;


# OPEN c FOR LOCAL var

DELIMITER $$;
CREATE PROCEDURE p1 AS
  c0 SYS_REFCURSOR;
  v0 TEXT;
  ps_name VARCHAR(30) := 'stmt';
BEGIN
  PREPARE stmt FROM 'SELECT 10';
  OPEN c0 FOR LOCAL ps_name;
  FETCH c0 INTO v0;
  CLOSE c0;
  SELECT v0;
END;
$$
DELIMITER ;$$
CALL p1;
DROP PROCEDURE p1;


# OPEN c FOR LOCAL spvar - allowed in a stored function with restrictions
# OK when used as an assignment right hand

DELIMITER $$;
CREATE FUNCTION f1() RETURN INT AS
  c0 SYS_REFCURSOR;
  spvar VARCHAR(10) DEFAULT 'stmt0';
BEGIN
  OPEN c0 FOR LOCAL spvar;
  RETURN 0;
END;
$$
DELIMITER ;$$
--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
SELECT f1();
DELIMITER $$;
CREATE PROCEDURE p1 AS
  a INT;
BEGIN
  a:= f1();
END;
$$
DELIMITER ;$$
--error ER_UNKNOWN_STMT_HANDLER
CALL p1;
PREPARE stmt0 FROM 'SELECT 1,2';
CALL p1;
DEALLOCATE PREPARE stmt0;
DROP PROCEDURE p1;
DROP FUNCTION f1;


# OPEN c FOR LOCAL var - not all parameters bound
DELIMITER $$;
CREATE PROCEDURE p1 AS
  c0 SYS_REFCURSOR;
  ps_name VARCHAR(10) := 'stmt';
BEGIN
  PREPARE stmt FROM 'SELECT :a';
  OPEN c0 FOR LOCAL ps_name;
END;
$$
DELIMITER ;$$
--error ER_WRONG_ARGUMENTS
CALL p1;
DROP PROCEDURE p1;


# OPEN c FOR LOCAL var - non-ascii characters in PS name

DELIMITER $$;
CREATE PROCEDURE p1 AS
  c0 SYS_REFCURSOR;
  v0 TEXT;
  ps_name VARCHAR(30) := 'àçé';
BEGIN
  PREPARE àçé FROM 'SELECT 10';
  OPEN c0 FOR LOCAL ps_name;
  FETCH c0 INTO v0;
  CLOSE c0;
  SELECT v0;
  DEALLOCATE PREPARE àçé;
END;
$$
DELIMITER ;$$
CALL p1;
DROP PROCEDURE p1;

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

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1126438
#Domains=1897691