Details
-
Technical task
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.3(EOL)
-
10.2.2-3, 10.2.2-1, 10.2.2-2, 10.2.2-4, 10.1.18
Description
Under terms of this task we'll add support for ROW type variables as SELECT..INTO targets.
Example:
SET sql_mode=DEFAULT; |
DROP TABLE IF EXISTS t1; |
DROP PROCEDURE IF EXISTS p1; |
CREATE TABLE t1 (a INT, b VARCHAR(32)); |
INSERT INTO t1 VALUES (10,'b10'); |
DELIMITER $$
|
CREATE PROCEDURE p1() |
BEGIN
|
DECLARE rec1 ROW(a INT, b VARCHAR(32)); |
SELECT * FROM t1 INTO rec1; |
SELECT rec1.a, rec1.b; |
END; |
$$
|
DELIMITER ;
|
CALL p1();
|
+--------+--------+
|
| rec1.a | rec1.b |
|
+--------+--------+
|
| 10 | b10 |
|
+--------+--------+
|
Example for sql_mode=ORACLE:
SET sql_mode=ORACLE; |
DROP TABLE IF EXISTS t1; |
DROP PROCEDURE IF EXISTS p1; |
CREATE TABLE t1 (a INT, b VARCHAR(32)); |
INSERT INTO t1 VALUES (10,'b10'); |
DELIMITER $$
|
CREATE PROCEDURE p1 AS |
rec1 ROW(a INT, b VARCHAR(32)); |
BEGIN
|
SELECT * FROM t1 INTO rec1; |
SELECT rec1.a, rec1.b; |
END; |
$$
|
DELIMITER ;
|
CALL p1();
|
+--------+--------+
|
| rec1.a | rec1.b |
|
+--------+--------+
|
| 10 | b10 |
|
+--------+--------+
|
sql_mode=ORACLE will additionally support table%ROWTYPE variables as SELECT..INTO targets:
SET sql_mode=ORACLE; |
DROP TABLE IF EXISTS t1; |
DROP PROCEDURE IF EXISTS p1; |
CREATE TABLE t1 (a INT, b VARCHAR(32)); |
INSERT INTO t1 VALUES (10,'b10'); |
DELIMITER $$
|
CREATE PROCEDURE p1 AS |
rec1 t1%ROWTYPE;
|
BEGIN
|
SELECT * FROM t1 INTO rec1; |
SELECT rec1.a, rec1.b; |
END; |
$$
|
DELIMITER ;
|
CALL p1();
|
+--------+--------+
|
| rec1.a | rec1.b |
|
+--------+--------+
|
| 10 | b10 |
|
+--------+--------+
|
sql_mode=ORACLE will additionally support cursor%ROWTYPE variables as SELECT..INTO targets:
SET sql_mode=ORACLE; |
DROP TABLE IF EXISTS t1; |
DROP PROCEDURE IF EXISTS p1; |
CREATE TABLE t1 (a INT, b VARCHAR(32)); |
INSERT INTO t1 VALUES (10,'b10'); |
DELIMITER $$
|
CREATE PROCEDURE p1 AS |
CURSOR cur1 IS SELECT * FROM t1; |
rec1 cur1%ROWTYPE;
|
BEGIN
|
SELECT * FROM t1 INTO rec1; |
SELECT rec1.a, rec1.b; |
END; |
$$
|
DELIMITER ;
|
CALL p1();
|
+--------+--------+
|
| rec1.a | rec1.b |
|
+--------+--------+
|
| 10 | b10 |
|
+--------+--------+
|
An attempt to use multiple ROW variables in the SELECT..INTO list will report an error.
An attempt to use ROW variables with a different column count than in the SELECT..INTO list will report an error.
Attachments
Issue Links
- blocks
-
MDEV-12461 TYPE OF and ROW TYPE OF anchored data types for stored routine variables
-
- Closed
-
- relates to
-
MDEV-12333 Allow %ROWTYPE variable fields as FETCH INTO targets
-
- Open
-
-
MDEV-12334 Allow %ROWTYPE variable fields as SELECT INTO targets
-
- Open
-
Activity
Field | Original Value | New Value |
---|---|---|
Description |
Under terms of this task we'll add support for {{ROW}} type variables as a {{SELECT..INTO}} target.
Example: {code:sql} SET sql_mode=DEFAULT; DROP TABLE IF EXISTS t1; DROP PROCEDURE IF EXISTS p1; CREATE TABLE t1 (a INT, b VARCHAR(32)); INSERT INTO t1 VALUES (10,'b10'); DELIMITER $$ CREATE PROCEDURE p1() BEGIN DECLARE rec1 ROW(a INT, b VARCHAR(32)); SELECT * FROM t1 INTO rec1; SELECT rec1.a, rec1.b; END; $$ DELIMITER ; CALL p1(); {code} {noformat} +--------+--------+ | rec1.a | rec1.b | +--------+--------+ | 10 | b10 | +--------+--------+ {noformat} Example for {{sql_mode=ORACLE}}: {code:sql} SET sql_mode=ORACLE; DROP TABLE IF EXISTS t1; DROP PROCEDURE IF EXISTS p1; CREATE TABLE t1 (a INT, b VARCHAR(32)); INSERT INTO t1 VALUES (10,'b10'); DELIMITER $$ CREATE PROCEDURE p1 AS rec1 ROW(a INT, b VARCHAR(32)); BEGIN SELECT * FROM t1 INTO rec1; SELECT rec1.a, rec1.b; END; $$ DELIMITER ; CALL p1(); {code} {noformat} +--------+--------+ | rec1.a | rec1.b | +--------+--------+ | 10 | b10 | +--------+--------+ {noformat} {{sql_mode=ORACLE}} will additionally support {{table%ROWTYPE}} variables as {{SELECT..INTO}} targets: {code:sql} SET sql_mode=ORACLE; DROP TABLE IF EXISTS t1; DROP PROCEDURE IF EXISTS p1; CREATE TABLE t1 (a INT, b VARCHAR(32)); INSERT INTO t1 VALUES (10,'b10'); DELIMITER $$ CREATE PROCEDURE p1 AS rec1 t1%ROWTYPE; BEGIN SELECT * FROM t1 INTO rec1; SELECT rec1.a, rec1.b; END; $$ DELIMITER ; CALL p1(); {code} {noformat} +--------+--------+ | rec1.a | rec1.b | +--------+--------+ | 10 | b10 | +--------+--------+ {noformat} {{sql_mode=ORACLE}} will additionally support {{cursor%ROWTYPE}} variables as {{SELECT..INTO}} targets: {code:sql} SET sql_mode=ORACLE; DROP TABLE IF EXISTS t1; DROP PROCEDURE IF EXISTS p1; CREATE TABLE t1 (a INT, b VARCHAR(32)); INSERT INTO t1 VALUES (10,'b10'); DELIMITER $$ CREATE PROCEDURE p1 AS CURSOR cur1 IS SELECT * FROM t1; rec1 cur1%ROWTYPE; BEGIN SELECT * FROM t1 INTO rec1; SELECT rec1.a, rec1.b; END; $$ DELIMITER ; CALL p1(); {code} {noformat} +--------+--------+ | rec1.a | rec1.b | +--------+--------+ | 10 | b10 | +--------+--------+ {noformat} An attempt to use multiple {{ROW}} variables in the {{SELECT..INTO}} list will report an error. An attempt to use {{ROW}} variables with a different column count than in the {{SELECT..INTO}} list will report an error. |
Under terms of this task we'll add support for {{ROW}} type variables as {{SELECT..INTO}} targets.
Example: {code:sql} SET sql_mode=DEFAULT; DROP TABLE IF EXISTS t1; DROP PROCEDURE IF EXISTS p1; CREATE TABLE t1 (a INT, b VARCHAR(32)); INSERT INTO t1 VALUES (10,'b10'); DELIMITER $$ CREATE PROCEDURE p1() BEGIN DECLARE rec1 ROW(a INT, b VARCHAR(32)); SELECT * FROM t1 INTO rec1; SELECT rec1.a, rec1.b; END; $$ DELIMITER ; CALL p1(); {code} {noformat} +--------+--------+ | rec1.a | rec1.b | +--------+--------+ | 10 | b10 | +--------+--------+ {noformat} Example for {{sql_mode=ORACLE}}: {code:sql} SET sql_mode=ORACLE; DROP TABLE IF EXISTS t1; DROP PROCEDURE IF EXISTS p1; CREATE TABLE t1 (a INT, b VARCHAR(32)); INSERT INTO t1 VALUES (10,'b10'); DELIMITER $$ CREATE PROCEDURE p1 AS rec1 ROW(a INT, b VARCHAR(32)); BEGIN SELECT * FROM t1 INTO rec1; SELECT rec1.a, rec1.b; END; $$ DELIMITER ; CALL p1(); {code} {noformat} +--------+--------+ | rec1.a | rec1.b | +--------+--------+ | 10 | b10 | +--------+--------+ {noformat} {{sql_mode=ORACLE}} will additionally support {{table%ROWTYPE}} variables as {{SELECT..INTO}} targets: {code:sql} SET sql_mode=ORACLE; DROP TABLE IF EXISTS t1; DROP PROCEDURE IF EXISTS p1; CREATE TABLE t1 (a INT, b VARCHAR(32)); INSERT INTO t1 VALUES (10,'b10'); DELIMITER $$ CREATE PROCEDURE p1 AS rec1 t1%ROWTYPE; BEGIN SELECT * FROM t1 INTO rec1; SELECT rec1.a, rec1.b; END; $$ DELIMITER ; CALL p1(); {code} {noformat} +--------+--------+ | rec1.a | rec1.b | +--------+--------+ | 10 | b10 | +--------+--------+ {noformat} {{sql_mode=ORACLE}} will additionally support {{cursor%ROWTYPE}} variables as {{SELECT..INTO}} targets: {code:sql} SET sql_mode=ORACLE; DROP TABLE IF EXISTS t1; DROP PROCEDURE IF EXISTS p1; CREATE TABLE t1 (a INT, b VARCHAR(32)); INSERT INTO t1 VALUES (10,'b10'); DELIMITER $$ CREATE PROCEDURE p1 AS CURSOR cur1 IS SELECT * FROM t1; rec1 cur1%ROWTYPE; BEGIN SELECT * FROM t1 INTO rec1; SELECT rec1.a, rec1.b; END; $$ DELIMITER ; CALL p1(); {code} {noformat} +--------+--------+ | rec1.a | rec1.b | +--------+--------+ | 10 | b10 | +--------+--------+ {noformat} An attempt to use multiple {{ROW}} variables in the {{SELECT..INTO}} list will report an error. An attempt to use {{ROW}} variables with a different column count than in the {{SELECT..INTO}} list will report an error. |
Labels | Compatibility |
Status | Open [ 1 ] | In Progress [ 3 ] |
Labels | Compatibility | Compatibility need_review |
Fix Version/s | 10.3.0 [ 22127 ] | |
Fix Version/s | 10.3 [ 22126 ] | |
Resolution | Fixed [ 1 ] | |
Status | In Progress [ 3 ] | Closed [ 6 ] |
Link | This issue relates to MDEV-12333 [ MDEV-12333 ] |
Link | This issue relates to MDEV-12334 [ MDEV-12334 ] |
Link |
This issue is blocked by |
Link |
This issue is blocked by |
Link |
This issue is blocked by |
Link |
This issue is blocked by |
Link |
This issue is blocked by |
Link |
This issue is blocked by |
Link |
This issue is blocked by |
Link |
This issue is blocked by |
Link |
This issue blocks |
Summary | Allow ROW variables as SELECT INTO targets | sql_mode=ORACLE: Allow ROW variables as SELECT INTO targets |
Summary | sql_mode=ORACLE: Allow ROW variables as SELECT INTO targets | Allow ROW variables as SELECT INTO targets |
Component/s | Stored routines [ 13905 ] |
Labels | Compatibility need_review | Compatibility |
Workflow | MariaDB v3 [ 80019 ] | MariaDB v4 [ 151821 ] |