Ⅰ、介绍:条件,循环,顺序控制结构;
Ⅱ、条件分支语句;
if--then , if--then--else, if--then--elseif --else;
㈠、简单的判断语句;
㈡、二重条件分支:if--then--else;
--编写一个过程,可以输入一个雇员名,
--如果该雇员名的补助不是0,就在原有的基础上增加100,
--如果没有补助,就把补助设置为200;
注意:oracle pl/sql中的不等于是<>而不是!=;
㈢、多重条件分支;if--then--elsif--else;
注意:s是elsif 而不是 elseif;
Ⅲ、循环语句:loop
㈠简单循环:loop;这种循环以loop开头,以end loop结尾,至少被执行一次;
㈡、while循环;
基本循环至少要执行一次,而对于while循环来说,只有条件为true时候,才会执行循环体语句,while循环以while,loop开始,以end loop结束;
㈢、for循环;
结构如下:
Ⅳ、顺序控制语句:goto,null;
㈠、goto语句:用于跳转到特定符号去执行语句,注意由于使用goto语句会增加程序的发杂度,并使得程序的可读性较差,所以建议大家不适用goto语句;
㈡、null:null语句不会执行任何操作,并且会直接将控制传递到下一条语句。使用null主要是为了提高pl/sql的可读性;
Ⅱ、条件分支语句;
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.