while 循环
while 条件语句 loop
begin
end;
end loop;
eg:
create or replace procedure test_while as
num int;
begin
num:=1;
while num < 10 loop
begin
dbms_output.put_line('test');
num=num+1;
end loop;
end;
/
create or replace procedure test_while as
v_id int;
begin
v_id:=1;
while v_id<=10 loop
begin
inser into TESTB_RENAME values(v_id);
v_id=v_id+1;
end loop;
end;
定义PL/SQL块 时需要注意的几点:
1、执行部分时必须的,声明部分和异常部分时可以选的
2、可以在一个块的执行部分或者异常处理部分嵌套其他的PL/SQL块。
3、所有的PL/SQL块都已END;结束。
实例:定义一个包含声明部分,执行部分,和异常处理部分的PL/SQL块
declare
v_name varchar2(10);
begin
select ename into v_name from emp where empno=1000;
DBMS_OUTPUT.PUT_LINE(v_name);
exception
when NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('NO DATA');
END;
/
实例:定义一个只包含执行部分的PL/SQL块
begin
DBMS_OUTPUT.PUT_LINE('NO DATA');
end;
/
实例:定义一个包含子块的PL/SQL块
declare
v_sal number(8,2);
v_deptno int;
begin
begin
select deptno into v_deptno from emp where EMPNO=7000;
end;
select avg(sal) into v_sal from emp where DEPTNO=v_deptno;
DBMS_OUTPUT.PUT_LINE(v_sal);
end;
/
if判断
declare
v_num int;
begin
v_num:=1;
if v_num <10 then
v_num:=v_num+1;
DBMS_OUTPUT.PUT_LINE(v_num);
end if;
end;
/
while + loop循环
declare
v_num int;
begin
v_num:=1;
while v_num<10 loop
v_num:=v_num+1;
DBMS_OUTPUT.PUT_LINE(v_num);
end loop;
end;
/
for 循环
declare
v_num int;
v_name int;
begin
v_num:=10;
v_name:=1;
for i in 1..v_num loop
DBMS_OUTPUT.PUT_LINE(v_name);
v_name:=v_name+1;
end loop;
end;
/
Oracle中三种循环(For、While、Loop)案例
1.ORACLE中的FOR循环用法(九九乘法表)
复制代码
1 declare
2 i int:=0;
3 j int:=0;
4 begin
5 for i in 1..9 loop
6 for j in 1..i loop
7 Dbms_Output.put(i||'*'||j||'='||i*j);
8 dbms_output.put(' ');
9 end loop;
10 dbms_output.new_line;
11 end loop;
12 end;
复制代码
2.ORACLE中的While循环用法(九九乘法表)
复制代码
1 declare
2 i int:=1;
3 j int:=1;
4 begin
5 while i<=9 loop
6 j:=1;
7 while j<=i loop
8 Dbms_Output.put(i||'*'||j||'='||i*j);
9 dbms_output.put(' ');
10 j:=j+1;
11 end loop;
12 dbms_output.new_line;
13 i:=i+1;
14 end loop;
15 end;
复制代码
3.ORACLE中的loop循环用法(九九乘法表)
复制代码
1 declare
2 i int:=1;
3 j int:=1;
4 begin
5 loop
6 loop
7 Dbms_Output.put(i||'*'||j||'='||i*j);
8 dbms_output.put(' ');
9 j:=j+1;
10 exit when j>i;
11 end loop;
12 dbms_output.put_line('');
13 i:=i+1;
14 j:=1;
15 exit when i>9;
16 end loop;
17 end;
复制代码
一、returning 语句
如果要查询当前DML语句操作的记录信息,可以在DML语句末尾使用returning语句返回记录的信息。
returning语句的基本语法和select..into相似。
returning salary into var1;
declare
var_no emp.sal%type;
begin
update emp set sal=sal+10000 where empno=7000;
returning sal into var_no;
dbms_output.put_line(var_no);
end;
/
二、IF语句
三、CASE语句
四、简单循环
LOOP循环:
declare
v_count int :=1;
begin
loop
dbms_output.put_line(v_count);
v_count:=v_count+1;
exit when v_count>20;
end loop;
end;
/
while循环:
while v_cunt<20 loop
dbms_output.put_line(v_count);
v_count:=v_count+1;
end loop;
FOR循环:
FOR counter in [REVERSE] low..high loop
使用for循环需要注意的事项:
1、循环变量不需要显示的定义系统隐含的将它定义为binary_interger变量。
2、系统默认循环变量时从小到大增加1,如果加入[reverse]参数则会变成递减。
3、循环变量只能在循环体中使用不能在循环体外使用。
begin
for v_c in 1..20 loop
dbms_output.put_line(v_c);
end loop;
end;
/
五、跳转结构 goto
case语句
case var1
when 10 then var:=100;
when 20 then var:=200;
end case;
六、游标
为了处理select语句只能怪返回多行数据的情况,在oracle 11g中恶意使用游标处理多行数据。
也可以使用select ...bulk collect into 语句处理多行数据。
显式游标:由用户定义、操作,用户处理返回多行数据的select 查询。
隐式游标:由系统自动进行操作,用于DML语句和返回单行数据的select 查询。
定义游标 > 打开游标 > 检索游标 > 是否为空 > 关闭游标