存储过程基础语法

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 查询。


定义游标 > 打开游标 > 检索游标 > 是否为空 > 关闭游标
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值