一、条件分支语句
条件分支语句用于依据特定的情况选择要执行的操作,PL/SQL提供了三种条件分支语句:if-then, if-then-else,if-then-elsif。
语法如下:
- if conditions then
- statements;
- [elseif conditions then
- statements;]
- [else
- statements;]
- end if;
if conditions then
statements;
[elseif conditions then
statements;]
[else
statements;]
end if;
1、if-then示例
用于执行单一条件判断,如果满足特定条件则会执行相应操作,如果不满足特定条件则退出条件分支语句。
-
- declare
- v_count number;
- begin
- select count(*) into v_count from cip_temps;
- if(v_count>0) then
- dbms_output.put_line('v_cont的值:'|| v_count);
- end if;
- end;
- /
declare
v_count number;
begin
select count(*) into v_count from cip_temps;
if(v_count>0) then
dbms_output.put_line('v_cont的值:'|| v_count);
end if;
end;
/
2、if-then-else示例
用于执行二重条件判断,如果满足特定条件则执行一组操作,如果不满足则执行另一组操作。
- declare
- v_count number;
- begin
- select count(*) into v_count from cip_temps;
- if(v_count>11) then
- dbms_output.put_line('v_cont的值:'|| v_count);
- else
- dbms_output.put_line('v_count的值:'|| v_count);
- end if;
- end;
- /
declare
v_count number;
begin
select count(*) into v_count from cip_temps;
if(v_count>11) then
dbms_output.put_line('v_cont的值:'|| v_count);
else
dbms_output.put_line('v_count的值:'|| v_count);
end if;
end;
/
3、if-then-elsif示例
用于执行多重条件判断,如果满足特定条件1则执行第一组操作,如果满足特定条件2则执行第二组操作,以此类推,如果都不满足特定条件则执行不满足条件的操作。
- declare
- v_count number;
- begin
- select count(*) into v_count from cip_temps;
- if(v_count>10) then
- dbms_output.put_line('if操作___v_cont的值:'|| v_count);
- elsif (v_count=10) then
- dbms_output.put_line('elsif操作____v_count的值:'|| v_count);
- else
- dbms_output.put_line('else操作____v_cout的值:'||v_count);
- end if;
- end;
- /
declare
v_count number;
begin
select count(*) into v_count from cip_temps;
if(v_count>10) then
dbms_output.put_line('if操作___v_cont的值:'|| v_count);
elsif (v_count=10) then
dbms_output.put_line('elsif操作____v_count的值:'|| v_count);
else
dbms_output.put_line('else操作____v_cout的值:'||v_count);
end if;
end;
/
二、case语句
当执行多重条件分支语句时,使用case语句更加简洁、而且效率也更好。case语句处理多重条件分支语句有两种方法,第一种方法是使用单一选择符进行等值比较。第二种方法是使用多种条件进行非等值比较。
1、使用单一选择符进行等值比较
当执行case语句执行多重条件分支时,如果条件选择符完全相同,并且条件表达式为相同条件选择,那么可以选择单一选择符进行等值比较,语法如下:
- case 条件选择符
- when 条件值表达式1 then 要执行的操作1;
- when 条件值表达式2 then 要执行的操作2;
- 。。。。。。。
- else
- 要执行的操作。
- end case;
case 条件选择符
when 条件值表达式1 then 要执行的操作1;
when 条件值表达式2 then 要执行的操作2;
。。。。。。。
else
要执行的操作。
end case;
示例如下:
- declare
- v_count number;
- begi
- select count(*) into v_count from cip_temps;
- case v_count
- when 1 then
- dbms_output.put_line('when 1操作___v_cont的值:'|| v_count);
- when 5 then
- dbms_output.put_line('when 5操作___v_count的值:'|| v_count);
- when 10 then
- dbms_output.put_line('when 10操作____v_count的值:'|| v_count);
- else
- dbms_output.put_line('else操作____v_cout的值:'||v_count);
- end case;
- end;
- /
declare
v_count number;
begi
select count(*) into v_count from cip_temps;
case v_count
when 1 then
dbms_output.put_line('when 1操作___v_cont的值:'|| v_count);
when 5 then
dbms_output.put_line('when 5操作___v_count的值:'|| v_count);
when 10 then
dbms_output.put_line('when 10操作____v_count的值:'|| v_count);
else
dbms_output.put_line('else操作____v_cout的值:'||v_count);
end case;
end;
/
2、case使用多种条件进行比较
如果选择多个条件进行不同比较时,那么必须在when子句中指定比较条件,语法如下:
- case
- when 条件值表达式1 then 要执行的操作1;
- when 条件值表达式2 then 要执行的操作2;
- 。。。。。。。
- else
- 要执行的操作。
- end case;
case
when 条件值表达式1 then 要执行的操作1;
when 条件值表达式2 then 要执行的操作2;
。。。。。。。
else
要执行的操作。
end case;
示例如下:
- declare
- v_count number;
- begin
- select count(*) into v_count from cip_temps;
- case
- when v_count>10 then
- dbms_output.put_line('when 1操作___v_cont的值:'|| v_count);
- when v_count>5 then
- dbms_output.put_line('when 5操作___v_count的值:'|| v_count);
- when v_count>4 then
- dbms_output.put_line('when 10操作____v_count的值:'|| v_count);
- else
- dbms_output.put_line('else操作____v_cout的值:'||v_count);
- end case;
- end;
- /
declare
v_count number;
begin
select count(*) into v_count from cip_temps;
case
when v_count>10 then
dbms_output.put_line('when 1操作___v_cont的值:'|| v_count);
when v_count>5 then
dbms_output.put_line('when 5操作___v_count的值:'|| v_count);
when v_count>4 then
dbms_output.put_line('when 10操作____v_count的值:'|| v_count);
else
dbms_output.put_line('else操作____v_cout的值:'||v_count);
end case;
end;
/
三、循环语句
三种循环:基本循环、while循环、for循环语句。
1、基本循环
循环语句以loop开始,以end loop结束,其语法如下:
loop
statement1;
。。。。。。
exit[when condition];
end loop;
注意:当执行基本循环语句时,无论是否满足条件,语句至少会被执行一次,当condition为true时,会推出循环。并执行end loop后的相应操作。当编写基本循环语句时,一定要有exit语句,否则会出现死循环,另外还要定义循环控制变量。
示例如下:
- declare
- i int:=1;
- begin
- loop
- dbms_output.put_line(i);
- exit when i=10;
- i:=i+1;
- nd loop;
- end;
- /
declare
i int:=1;
begin
loop
dbms_output.put_line(i);
exit when i=10;
i:=i+1;
end loop;
end;
/
2、while循环
对于while循环,只要条件为true时,才执行循环体内语句。while循环以while...loop开始,以end loop结束。其语法如下:
while 条件 loop
语句1;
语法2;
end loop;
当条件为true执行循环体内语句,当条件为false或full时,则跳出循环执行end loop以后的语句,另外还要定义循环控制变量。
示例如下:
- declare
- i int:=1;
- begin
- while i<=10 loop
- dbms_output.put_line(i);
- i:=i+1;
- end loop;
- end;
- /
declare
i int:=1;
begin
while i<=10 loop
dbms_output.put_line(i);
i:=i+1;
end loop;
end;
/
3、for循环
当使用for循环时,oracle会隐藏定义循环控制变量(即不需要人工定义循环控制变量),语法如下:
for counter in[reverse]
lower_bound..upper_bound loop
statement1;
statement2;
..........
end loop;
注意:counter循环控制变量,oracle会隐藏定义,lower_bound和upper_bound分别对应于循环变量的下界值和上界值,默认情况下,当使用for循环时,每次循环时循环控制变量会自动增一;如果指定reverse选项,那么每次循环时循环变量会自动减一。示例如下:
- declare
- begin
- for i in reverse 1..10 loop
- dbms_output.put_line(i);
- end loop;
- end;
- /
declare
begin
for i in reverse 1..10 loop
dbms_output.put_line(i);
end loop;
end;
/