mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-10580 sql_mode=ORACLE: FOR loop statement
Adding non-labeled FOR LOOP statement.
This commit is contained in:
@ -560,3 +560,70 @@ Pos Instruction
|
||||
8 preturn
|
||||
9 hpop 1
|
||||
DROP PROCEDURE p1;
|
||||
# Testing FOR loop statement
|
||||
CREATE FUNCTION f1 (a INT, b INT) RETURN INT
|
||||
AS
|
||||
total INT := 0;
|
||||
BEGIN
|
||||
FOR i IN 1 .. a
|
||||
LOOP
|
||||
total:= total + i;
|
||||
IF i = b THEN
|
||||
EXIT;
|
||||
END IF;
|
||||
END LOOP;
|
||||
RETURN total;
|
||||
END
|
||||
/
|
||||
SHOW FUNCTION CODE f1;
|
||||
Pos Instruction
|
||||
0 set total@2 0
|
||||
1 set i@3 1
|
||||
2 set [upper_bound]@4 a@0
|
||||
3 jump_if_not 9(9) i@3 <= [upper_bound]@4
|
||||
4 set total@2 total@2 + i@3
|
||||
5 jump_if_not 7(7) i@3 = b@1
|
||||
6 jump 9
|
||||
7 set i@3 i@3 + 1
|
||||
8 jump 3
|
||||
9 freturn 3 total@2
|
||||
SELECT f1(3, 100) FROM DUAL;
|
||||
f1(3, 100)
|
||||
6
|
||||
SELECT f1(3, 2) FROM DUAL;
|
||||
f1(3, 2)
|
||||
3
|
||||
DROP FUNCTION f1;
|
||||
CREATE FUNCTION f1 (a INT, b INT) RETURN INT
|
||||
AS
|
||||
total INT := 0;
|
||||
BEGIN
|
||||
FOR i IN REVERSE a..1
|
||||
LOOP
|
||||
total:= total + i;
|
||||
IF i = b THEN
|
||||
EXIT;
|
||||
END IF;
|
||||
END LOOP;
|
||||
RETURN total;
|
||||
END
|
||||
/
|
||||
SHOW FUNCTION CODE f1;
|
||||
Pos Instruction
|
||||
0 set total@2 0
|
||||
1 set i@3 a@0
|
||||
2 set [upper_bound]@4 1
|
||||
3 jump_if_not 9(9) i@3 >= [upper_bound]@4
|
||||
4 set total@2 total@2 + i@3
|
||||
5 jump_if_not 7(7) i@3 = b@1
|
||||
6 jump 9
|
||||
7 set i@3 i@3 + -1
|
||||
8 jump 3
|
||||
9 freturn 3 total@2
|
||||
SELECT f1(3, 100) FROM DUAL;
|
||||
f1(3, 100)
|
||||
6
|
||||
SELECT f1(3, 2) FROM DUAL;
|
||||
f1(3, 2)
|
||||
5
|
||||
DROP FUNCTION f1;
|
||||
|
Reference in New Issue
Block a user