数据库Oracle与Mysql语法对比:循环结构

时间:2021-07-01 14:55:58

循环结构是最重要的程序控制结构,用来控制反复执行一段程序。比如要进行累加,则可以通过适当的循环程序实现。PL/SQL 循环结构可划分为以下 3 种:
 基本 LOOP 循环。
 FOR LOOP 循环。
 WHILE LOOP 循环。

Oracle

1.基本 LOOP 循环

基本循环的结构如下:
LOOP –循环起始标识 语句 1; 语句 2; EXIT [WHEN 条件];
END LOOP; –循环结束标识
该循环的作用是反复执行 LOOP 与 END LOOP 之间的语句。
EXIT 用于在循环过程中退出循环,WHEN 用于定义 EXIT 的退出条件。如果没有
WHEN 条件,遇到 EXIT 语句则无条件退出循环。
【训练 1】 求:12+32+52+…+152 的值。
输入并执行以下程序:

SET SERVEROUTPUT ON 
DECLARE v_total NUMBER(6):=0;
v_count NUMBER(6):=1;
BEGIN LOOP
v_total:=v_total+v_count**2;

EXIT WHEN v_count=15;--条件退出 v_count:=v_count+2;
END LOOP;
DBMS_OUTPUT.PUT_LINE(v_total);
END;

输出结果为: 680

2.FOR LOOP 循环

FOR 循环是固定次数循环,格式如下:
FOR 控制变量 in [REVERSE] 下限..上限 LOOP 语句 1; 语句 2;
END LOOP;
循环控制变量是隐含定义的,不需要声明。
下限和上限用于指明循环次数。正常情况下循环控制变量的取值由下限到上限递增,
REVERSE 关键字表示循环控制变量的取值由上限到下限递减。
【训练 2】以下是用 FOR 循环输出图形。

    SET SERVEROUTPUT ON 
BEGIN
FOR I IN 1..8
LOOP
DBMS_OUTPUT.PUT_LINE(to_char(i)||rpad('*',I,'*'));

END LOOP;
END;
输出结果为: 

1*
2**
3***
4****
5*****
6******
7*******

3.WHILE LOOP 循环

WHILE 循环是有条件循环,其格式如下:
WHILE 条件 LOOP 语句 1; 语句 2; END LOOP;
当条件满足时,执行循环体;当条件不满足时,则结束循环。如果第一次判断条件为
假,则不执行循环体。 以下是 WHILE 循环结构的练习。
【训练 3】 使用 WHILE 循环向 emp 表连续插入 5 个记录。 步骤 1:执行下面的程序:

SET SERVEROUTPUT ON DECLARE 
v_count NUMBER(2) := 1;
BEGIN
WHILE v_count <6 LOOP
INSERT INTO emp(empno, ename)
VALUES (5000+v_count, '临时');

v_count := v_count + 1;
END LOOP;
COMMIT; END;

输出结果为:
PL/SQL 过程已成功完成。 步骤 2:显示插入的记录:
SELECT empno,ename FROM emp WHERE ename=’临时’;
输出结果为:
EMPNO ENAME
—————— ———-
5001 临时
5002 临时
5003 临时
5004 临时
5005 临时

Mysql

mysql三种循环:loop,while,repeat。

loop

DELIMITER $$ 
drop procedure if exists pro_loop$$
CREATE PROCEDURE pro_loop(p1 INT)
BEGIN
label1:
LOOP
SET p1 = p1 + 1;
IF p1 < 10 THEN
SELECT p1 AS result;
ITERATE label1;
END IF;
SELECT 'END IF' AS result;
LEAVE label1;
END LOOP label1;
SET @x = p1;
SELECT @x as result;
END$$
call pro_loop(8);

while

DELIMITER $$  
DROP PROCEDURE IF EXISTS pro_while$$
CREATE PROCEDURE pro_while
(
i INT
)

BEGIN
DECLARE j INT DEFAULT 1;

WHILE j < i DO
SELECT j AS result;
SET j = j + 1;
END WHILE;
END$$
call pro_while(3);

REPEAT

DELIMITER $$  
DROP PROCEDURE IF EXISTS pro_repeat$$
CREATE PROCEDURE pro_repeat(p1 INT)
BEGIN
SET @X = 0;

REPEAT
SELECT @X AS result;
SET @X = @X + 1;
UNTIL @X > p1
END REPEAT;
END$$
call pro_repeat(2);