一.顺序结构
顺序结构就是按照语句出现的先后顺序执行
二.选择结构
选择结构即if结构,通过判断条件为true或为false来执行相应的代码,有下面3种结构
1.if-then
这个结构只有一个测试条件,如果条件为true则执行then部分的代码,如果条件为false则跳过此结构,下面是一个实例:
declare
var1 constant int :=50 ;
var2 constant int :=200 ;
if var1>var2 then
dbms_output.put_line('var1 比var2大') ;
end if ;
嵌套if-then结构
declare
var1 constant int :=50 ;
var2 constant int :=200 ;
var3 constant int :=120 ;
if var1>var2 then
if var1>var3 then
dbms_output.put_line('这三个数中var1最大') ;
end if ;
end if ;
❤注意
a.每个if语句都有自己的then,以if语句开始的语句行不跟语句结束符号“;”。
b.每个if语句块以相应的end if结束。
2.if-then-else
此语句是在上一个if-then的基础上加上一个else部分来处理当if条件为假时的语句。
if-then-else也可以嵌套使用,用于处理更为复杂的条件。
例如:
if var1>var2 then
dbms_output.put_line('var1比var2大');
else
if var1=var2 then
dbms_output.put_line('var1和var2一样大') ;
else
dbms_output.put_line('var1小于var2') ;
end if;
end if;
❤
c.每个if语句有且只有一个else。
d.else语句后面不跟语句结束符号。
3.if-then-elseif
用于替代嵌套if-then-else结构,上面的例子可改写为:
if var1>var2 then
dbms_output.put_line('var1比var2大');
elseif var1=var2 then
dbms_output.put_line('var1和var2一样大') ;
else
dbms_output.put_line('var1小于var2') ;
end if;
❤
e.elseif无匹配的end if。
三.NULL结构
NULL结构也叫空操作或空值处理,特别是在使用if逻辑结构时,用户测试一个条件,当测试条件为真,什么工作都不做,当测试条件为假,则执行某些操作,例如
if var1<60 then
null ;
else
insert into stuentCourse varlues('pass',studentNo,courseNo) ;
end if ;
四.循环结构
Oracle提供三种循环结构
1.loop-exit-end
语法:
Loop
执行语句1;
执行语句2;
......
Exit
End ;
实例:
set serveroutput on
declare ctr integer:=0;
begin
dbms_output.put(ctr||' ');
ctr:=ctr+1;
exit when ctr=10;
end loop;
dbms_output.put_line(loop exited');
end;
2.while-loop-end
语法:
While 布尔表达式 loop
执行语句1;
执行语句2;
......
End loop;
实例:
set serveroutput on
declare ctr integer:=0;
begin
while ctr<10 loop
dbms_output.put(ctr||' ');
ctr:=ctr+1;
end loop;
dbms_output.put_line(loop exited');
end;
3.for-in-loop-end
语法:
For 循环变量 in [reverse] 起始值..终止值 loop
执行语句1;
执行语句2;
...
End loop;
Reverse关键字是标识循环倒过来执行,也就是循环变量从初始值一直减少到终止值。
实例:
1.输出0到9之间的数
set serveroutput on
begin
dbms_output.enable;
for ctr in 0..9 loop
dbms_output.put(ctr||' ');
end loop;
dbms_output.put_line('loop exited');
end;
2.循环打印阿斯克码表
set serveroutput on size 10240
SQL> declare
2 i number;
3 j number;
4 k number;
5 begin
6 for i in 2..15 loop
7 for j in 1..16 loop
8 k:=i*16+j;
9 dbms_output.put((to_char(k,'000'))||':'||chr(k)||' ');
10 if k mod 8=0 then
11 dbms_output.put_line('');
12 end if;
13 end loop;
14 end loop;
15 end;