一.loop循环
语法:
声明循环变量
loop
判断循环条件 ,如果循环条件不成立,跳出循环
if 条件表达式 then
exit;
end if;
语句块;
改变循环变量的值
end loop;
举例:输出1到100以内的自然数
declare -- 声明循环变量 v_i number(8):=1; begin loop -- 判断循环条件,条件成立,跳出循环 if v_i>100 then exit; end if; -- 输出1到100以内的自然数 dbms_output.put_line(v_i); -- 改变循环变量的值 v_i:=v_i+1; end loop; end;
举例:输出部门表的所有内容
into只能用一个或者一行的方式赋值,我们可以用bulk collect into来给行类型变量整体赋值,也就是说可以一次性
把所有数据查询出来,为table类型的变量赋值。
declare -- 声明table类型 type dept_table_type is table of dept%rowtype index by binary_integer; -- 声明table类型的变量,用来存储部门表的所有数据 v_dept dept_table_type; -- 声明循环变量 v_i number(8):=1; begin -- 查询所有部门表的内容,放到v_dept变量中 select * bulk collect into v_dept from dept; -- 循环除数v_dept变量中的值 loop -- 判断循环条件 if v_i>v_dept.count then exit; end if; dbms_output.put_line('部门编号:'||v_dept(v_i).deptno||',部门名称:'||v_dept(v_i).dname ||'部门位置:'||v_dept(v_i).loc); -- 改变循环变量的值 v_i:=v_i+1; end loop; end;
二.while循环
语法:
声明循环变量,给循环变量赋初始值
while 条件表达式
loop
语句块;
改变循环变量的值
end loop;
举例:输出1到100以内的自然数
declare -- 声明循环变量 v_i number(8):=1; v_str varchar2(1000):=''; begin --如果条件成立,执行循环 while v_i<=100 loop v_str:=v_str||v_i||' '; -- 改变循环变量的值 v_i:=v_i+1; end loop; dbms_output.put_line(v_str); end;
三.for循环
语法:
for 循环变量 in 循环变量的开始值..循环变量的结束值
loop
语句块;
end loop;
注意:for循环,循环变量可以直接使用,不用声明。in 包含循环变量的开始值和结束值
举例:输出1到100以内的自然数
begin -- 循环变量不用声明 for v_i in 1..100 loop dbms_output.put_line(v_i); end loop; end;
举例:输出部门表的所有内容
declare -- 声明table类型 type dept_table_type is table of dept%rowtype index by binary_integer; -- 声明table类型的变量,用来存储部门表的所有数据 v_dept dept_table_type; begin -- 查询所有部门表的内容,放到v_dept变量中 select * bulk collect into v_dept from dept; -- 循环除数v_dept变量中的值 for v_i in v_dept.first..v_dept.last loop dbms_output.put_line('部门编号:'||v_dept(v_i).deptno||',部门名称:'||v_dept(v_i).dname ||'部门位置:'||v_dept(v_i).loc); end loop; end;