循环结构是最重要的程序控制结构,用来控制反复执行一段程序。比如要进行累加,则可以通过适当的循环程序实现。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);