循环语句:LOOP,WHILE和数字式循环

中国世界杯足球 2025-05-28 23:20:05

一 简单循环

1 语法:

LOOP 要执行的语句; EXIT WHEN <条件语句> --条件满足,退出循环语句 END LOOP;

2 例子:

DECLARE int NUMBER(2) :=0;BEGIN LOOP int := int + 1; DBMS_OUTPUT.PUT_LINE('int 的当前值为:'||int); EXIT WHEN int =10; END LOOP;END;

二 WHILE循环

1 语法:

WHILE <布尔表达式> LOOP 要执行的语句;END LOOP;

2 例子:

DECLARE x NUMBER :=1;BEGIN WHILE x<=10 LOOP DBMS_OUTPUT.PUT_LINE('X的当前值为:'||x); x:= x+1; END LOOP;END;

三 数字式循环

1 语法:

[<<循环标签>>]FOR 循环计数器 IN [ REVERSE ] 下限 .. 上限 LOOP 要执行的语句;END LOOP [循环标签];

每循环一次,循环变量自动加1;使用关键字REVERSE,循环变量自动减1。跟在IN REVERSE 后面的数字必须是从小到大的顺序,而且必须是整数,不能是变量或表达式。可以使用EXIT退出循环。

2 例子:

BEGIN FOR int in 1..10 LOOP DBMS_OUTPUT.PUT_LINE('int 的当前值为: '||int); END LOOP;END;

CREATE TABLE temp_table(num_col NUMBER);DECLARE V_counter NUMBER := 10;BEGIN INSERT INTO temp_table(num_col) VALUES (v_counter ); FOR v_counter IN 20 .. 25 LOOP INSERT INTO temp_table (num_col ) VALUES ( v_counter ); END LOOP; INSERT INTO temp_table(num_col) VALUES (v_counter ); FOR v_counter IN REVERSE 20 .. 25 LOOP INSERT INTO temp_table (num_col ) VALUES ( v_counter ); END LOOP;END ;DROP TABLE temp_table;

DECLARE TYPE jobids_varray IS VARRAY(12) OF VARCHAR2(10); --定义一个VARRAY数据类型 v_jobids JOBIDS_VARRAY; --声明一个具有JOBIDS_VARRAY数据类型的变量 v_howmany NUMBER; --声明一个变量来保存雇员的数量BEGIN --用某些job_id值初始化数组 v_jobids := jobids_varray('FI_ACCOUNT', 'FI_MGR', 'ST_CLERK', 'ST_MAN'); --用FOR...LOOP...END LOOP循环使用每个数组成员的值 FOR i IN v_jobids.FIRST..v_jobids.LAST LOOP --针对数组中的每个岗位,决定该岗位的雇员的数量 SELECT count(*) INTO v_howmany FROM employees WHERE job_id = v_jobids(i); DBMS_OUTPUT.PUT_LINE ( '岗位'||v_jobids(i)|| '总共有'|| TO_CHAR(v_howmany) || '个雇员'); END LOOP;END;

在While循环中嵌套loop循环

/*求100至110之间的素数*/DECLARE v_m NUMBER := 101; v_i NUMBER; v_n NUMBER := 0;BEGIN WHILE v_m < 110 LOOP v_i := 2; LOOP IF mod(v_m, v_i) = 0 THEN v_i := 0; EXIT; END IF; v_i := v_i + 1; EXIT WHEN v_i > v_m - 1; END LOOP; IF v_i > 0 THEN v_n := v_n + 1; DBMS_OUTPUT.PUT_LINE('第'|| v_n || '个素数是' || v_m); END IF; v_m := v_m + 2; END LOOP;END;