Oracle Database :玩转Oracle学习笔记之(12):PLSQL控制结构

Ⅰ、介绍:条件,循环,顺序控制结构;

Ⅱ、条件分支语句;
if--then , if--then--else, if--then--elseif --else;
㈠、简单的判断语句;

SQL> --编写一个过程,可以输入一个员工名,
SQL> --如果该员工工资低于2000,就给该员工增加10%;
SQL> create or replace procedure mypro(spName varchar2) is
  2  --定义;
  3  v_sal emp.sal%type;
  4  begin
  5  --执行
  6  select sal into v_sal from emp where ename=spName;
  7  --判断;
  8  if v_sal<2000 then
  9  update emp set sal=sal*1.1 where ename=spName;
 10  end if;
 11  end;
 12
 13
 14  /

Procedure created.



㈡、二重条件分支:if--then--else;



--编写一个过程,可以输入一个雇员名,
--如果该雇员名的补助不是0,就在原有的基础上增加100,
--如果没有补助,就把补助设置为200;

SQL> create or replace procedure mypro(spName varchar2) is
  2  --define
  3  v_comm emp.comm%type;
  4  begin
  5  --执行;
  6  select comm into v_comm from emp where ename=spName;
  7
  8  --判断;
  9  if v_comm<>0 then
 10  update emp set comm=comm+100 where ename=spName;
 11  else
 12  update emp set comm=comm+200 where ename=spName;
 13  end if;
 14  end;
 15  /

Procedure created.




注意:oracle pl/sql中的不等于是<>而不是!=;


㈢、多重条件分支;if--then--elsif--else;

注意:s是elsif 而不是 elseif;


SQL> --编写一个过程,可以输入雇员号,如果该雇员的职位是PRESIDENT,
SQL> --借给他增加1000工资,如果是manager,就增加500,
SQL> --如果是其他就增加200;
SQL>
SQL> create or replace procedure mypro(spNo number) is
  2  --define
  3  v_job emp.job%type;
  4  begin
  5  --执行;
  6  select job into v_job from emp where empno=spNo;
  7
  8  --判断;
  9  if v_job='PRESIDENT' then
 10  update emp set sal=sal+1000 where empno=spNo;
 11  elsif v_job='MANAGER' then
 12  update emp set sal=sal+500  where empno=spNo;
 13  else
 14  update emp set sal=sal+200  where empno=spNo;
 15  end if;
 16  end;
 17  /

Procedure created.



Ⅲ、循环语句:loop

㈠简单循环:loop;这种循环以loop开头,以end loop结尾,至少被执行一次;


SQL> --现在有一张表 用户id,用户名;
SQL> --编写一个过程,可以输入用户名,
SQL> --并添加10个用户到表中,用户编号从1开始;
SQL>
SQL> --创建用户表;
SQL> create  table users(id number(3) , name varchar2(5));

Table created.

SQL> --创建过程;
SQL> create or replace procedure mypro(spName varchar2) is
  2  --定义部分;
  3  --定义循环的次数;
  4  v_num number :=1;
  5  begin
  6  --执行部分;
  7  --循环;
  8  loop
  9  insert into users values(v_num , spName);
 10  --判断是否要推出循环;
 11  --注意,判断是否相等用=,而赋值的时候用:=;
 12  exit when v_num=10;
 13  --自增;
 14  --注意,判断是否相等用=,而赋值的时候用:=;
 15  v_num:=v_num+1;
 16  end loop;
 17  end;
 18  /

Procedure created.



㈡、while循环;
基本循环至少要执行一次,而对于while循环来说,只有条件为true时候,才会执行循环体语句,while循环以while,loop开始,以end loop结束;


SQL> --编写一个过程,可以输入用户名,
SQL> --并添加10个用户到表中,用户编号从11开始;
SQL>
SQL> --创建过程;
SQL> create or replace procedure mypro(spName varchar2) is
  2  --定义部分;
  3  --定义循环的次数;
  4  v_num number :=11;
  5  begin
  6  --执行部分;
  7  --循环;
  8  while v_num<=20 loop
  9  insert into users values(v_num , spName);
 10  --自增;
 11  --注意,判断是否相等用=,而赋值的时候用:=;
 12  v_num:=v_num+1;
 13  end loop;
 14  end;
 15  /

Procedure created.


㈢、for循环;
结构如下:

begin
for i in reverse 21..30 loop
insert into users values(i,'zhao');
end loop;
end;

我们可以看到,控制变量在隐含中就会不停的增加;

SQL> begin
  2  for i in reverse 21..30 loop
  3  insert into users values(i,'zhao');
  4  end loop;
  5  end;
  6  /

PL/SQL procedure successfully completed.


Ⅳ、顺序控制语句:goto,null;

㈠、goto语句:用于跳转到特定符号去执行语句,注意由于使用goto语句会增加程序的发杂度,并使得程序的可读性较差,所以建议大家不适用goto语句;

SQL> set serveroutput on;
SQL> declare
  2  i int:=1;
  3  begin
  4     loop
  5     dbms_output.put_line('OUt put : '||i);
  6     if i=10 then
  7     goto end_loop;
  8     end if;
  9     i:=i+1;
 10     end loop;
 11     <<end_loop>>
 12  dbms_output.put_line('Loop END!');
 13  end;
 14  /
OUt put : 1
OUt put : 2
OUt put : 3
OUt put : 4
OUt put : 5
OUt put : 6
OUt put : 7
OUt put : 8
OUt put : 9
OUt put : 10
Loop END!


㈡、null:null语句不会执行任何操作,并且会直接将控制传递到下一条语句。使用null主要是为了提高pl/sql的可读性;

SQL> create or replace procedure mypro is
  2  v_sal emp.sal%type;
  3  v_ename emp.ename%type;
  4  begin
  5  select ename , sal into v_ename , v_sal
  6  from emp where empno=&no;
  7  if v_sal<3000 then
  8  update emp set comm=sal*0.1 where ename=v_ename;
  9  else
 10  null;
 11  end if;
 12  end;
 13  /
Enter value for no: 7788
old   6: from emp where empno=&no;
new   6: from emp where empno=7788;

Procedure created.
PL/SQL procedure successfully completed.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值