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:
@ -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
|
||||
#
|
||||
|
Reference in New Issue
Block a user