1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-27 18:02:13 +03:00

MDEV-10597 Cursors with parameters

This commit is contained in:
Alexander Barkov
2016-10-21 11:51:49 +04:00
parent 4ed804aa4d
commit f8a714c848
15 changed files with 1602 additions and 218 deletions

View File

@ -827,3 +827,63 @@ SELECT f1(3), f1(4), f1(5), f1(6) FROM DUAL;
f1(3) f1(4) f1(5) f1(6)
3 4 4 5
DROP FUNCTION f1;
#
# Start of MDEV-10597 Cursors with parameters
#
CREATE PROCEDURE p1(arg_value_a VARCHAR, arg_value_b VARCHAR,
arg_pattern_a VARCHAR, arg_pattern_b VARCHAR)
AS
v_a VARCHAR(10);
v_b VARCHAR(20);
CURSOR c (p_value_a VARCHAR,
p_value_b VARCHAR,
p_pattern_a VARCHAR,
p_pattern_b VARCHAR,
p_limit_a INT,
p_limit_b INT,
p_unused TEXT) IS
(SELECT p_value_a, p_value_b FROM DUAL
WHERE p_value_a LIKE p_pattern_a LIMIT p_limit_a)
UNION
(SELECT p_value_b, p_value_a FROM DUAL
WHERE p_value_b LIKE p_pattern_b LIMIT p_limit_b);
BEGIN
OPEN c(arg_value_a, (SELECT arg_value_b),
arg_pattern_a, arg_pattern_b, 100, 101, 'x');
LOOP
FETCH c INTO v_a, v_b;
EXIT WHEN c%NOTFOUND;
SELECT v_a, v_b;
END LOOP;
CLOSE c;
END;
$$
CALL p1('aaa','bbb','aaa','bbb');
v_a v_b
aaa bbb
v_a v_b
bbb aaa
SHOW PROCEDURE CODE p1;
Pos Instruction
0 set v_a@4 NULL
1 set v_b@5 NULL
2 cpush c@0
3 set p_value_a@6 arg_value_a@0
4 set p_value_b@7 (select arg_value_b@1)
5 set p_pattern_a@8 arg_pattern_a@2
6 set p_pattern_b@9 arg_pattern_b@3
7 set p_limit_a@10 100
8 set p_limit_b@11 101
9 set p_unused@12 'x'
10 copen c@0
11 cfetch c@0 v_a@4 v_b@5
12 jump_if_not 14(0) "c"%NOTFOUND
13 jump 16
14 stmt 0 "SELECT v_a, v_b"
15 jump 11
16 cclose c@0
17 cpop 1
DROP PROCEDURE p1;
#
# End of MDEV-10597 Cursors with parameters
#