pl/sql是功能十分强大的语句,可以和sql一起来用,可以解决一些sql无法完成的问题。下面是关于流程循环语句的总结:
一.条件语句:
1.if ....then ....end if;
2.if ....then ....else end if;
3.if ....then ....elsif ...then...end if;
4.
CASE variable_name
WHEN case1 THEN statement1;
WHEN case2 THEN statement2;
... WHEN caseN-1 THEN statementN-1;
[ELSE statementN]
END CASE; 1.
SQL> set serveroutput on;
SQL> declare
2 v_i number := 1;
3 v_sum number := 0;
4 begin
5 loop
6 v_sum :=v_sum + v_i;
7 v_i := v_i +1;
8 if v_i > 100 then exit;
9 end if;
10 end loop;
11 DBMS_OUTPUT.PUT_LINE(v_sum);
12 end;
13 /
5050
PL/SQL 过程已成功完成。
exit在pl/sql中用以结束,上面的匿名块也可以改写为:
declare
v_i number := 1;
v_sum number := 0;
begin
loop
v_sum :=v_sum + v_i;
v_i := v_i +1;
-- if v_i > 100 then exit;(把之前的comment了)
exit when v_i >100; ==>exit用于结束,注意与上面的区别,上面exit后面没有带条件。
--end if;
end loop;
DBMS_OUTPUT.PUT_LINE(v_sum);
end;
================================================
2.
declare
v_i number := 1;
v_sum number := 0;
begin
loop
v_sum :=v_sum + v_i;
v_i := v_i +1;
if v_i < 50 then DBMS_OUTPUT.PUT_LINE(v_sum) ;
-- else exit;
else exit when v_i>60;
end if;
end loop;
DBMS_OUTPUT.PUT_LINE(v_sum);
end;
=============================================
3.
declare
v_i number := 1;
v_sum number := 0;
begin
loop
v_sum :=v_sum + v_i;
v_i := v_i +1;
if v_i < 50 then DBMS_OUTPUT.PUT_LINE(v_sum) ;
elsif v_i>60 then exit ;
end if;
end loop;
DBMS_OUTPUT.PUT_LINE(v_sum);
end;
======================================
4.
declare
v_i number :=1;
v_sum number := 0;
begin
while v_i>100
loop
v_sum :=v_sum + v_i;
v_i := v_i + 1;
case v_i
when 50 then DBMS_OUTPUT.PUT_LINE(v_sum);
when 60 then exit;
end case;
end loop;
DBMS_OUTPUT.PUT_LINE(v_sum);
end;
下面case后面什么都不加,后面可以判断具体区间:
declare
v_i number :=1;
v_sum number := 0;
begin
while v_i>100
loop
v_sum :=v_sum + v_i;
v_i := v_i + 1;
case
when v_i<50 then DBMS_OUTPUT.PUT_LINE(v_sum);
when v_i>60 then exit;
end case;
end loop;
end;
======================================
二.循环语句:
1.
while ..
loop
.....
end loop;
.....
end;
declare
v_i number :=1;
v_sum number := 0;
begin
while v_i>100
loop
v_sum :=v_sum + v_i;
v_i := v_i + 1;
end loop;
DBMS_OUTPUT.PUT_LINE(v_sum);
end;
注意这里没有do...while..语句
=============================
for i in .. j
loop
......
end loop;
.......
end;
declare
v_sum number := 0;
begin
for i in 1 .. 100 ==>注意此时这里变量i不需要定义,可以在for循环里直接用。
loop
v_sum :=v_sum + i;
end loop;
DBMS_OUTPUT.PUT_LINE(v_sum);
end;
for循环用在游标中很普遍,很方便简洁。
一.条件语句:
1.if ....then ....end if;
2.if ....then ....else end if;
3.if ....then ....elsif ...then...end if;
4.
CASE variable_name
WHEN case1 THEN statement1;
WHEN case2 THEN statement2;
... WHEN caseN-1 THEN statementN-1;
[ELSE statementN]
END CASE; 1.
SQL> set serveroutput on;
SQL> declare
2 v_i number := 1;
3 v_sum number := 0;
4 begin
5 loop
6 v_sum :=v_sum + v_i;
7 v_i := v_i +1;
8 if v_i > 100 then exit;
9 end if;
10 end loop;
11 DBMS_OUTPUT.PUT_LINE(v_sum);
12 end;
13 /
5050
PL/SQL 过程已成功完成。
exit在pl/sql中用以结束,上面的匿名块也可以改写为:
declare
v_i number := 1;
v_sum number := 0;
begin
loop
v_sum :=v_sum + v_i;
v_i := v_i +1;
-- if v_i > 100 then exit;(把之前的comment了)
exit when v_i >100; ==>exit用于结束,注意与上面的区别,上面exit后面没有带条件。
--end if;
end loop;
DBMS_OUTPUT.PUT_LINE(v_sum);
end;
================================================
2.
declare
v_i number := 1;
v_sum number := 0;
begin
loop
v_sum :=v_sum + v_i;
v_i := v_i +1;
if v_i < 50 then DBMS_OUTPUT.PUT_LINE(v_sum) ;
-- else exit;
else exit when v_i>60;
end if;
end loop;
DBMS_OUTPUT.PUT_LINE(v_sum);
end;
=============================================
3.
declare
v_i number := 1;
v_sum number := 0;
begin
loop
v_sum :=v_sum + v_i;
v_i := v_i +1;
if v_i < 50 then DBMS_OUTPUT.PUT_LINE(v_sum) ;
elsif v_i>60 then exit ;
end if;
end loop;
DBMS_OUTPUT.PUT_LINE(v_sum);
end;
======================================
4.
declare
v_i number :=1;
v_sum number := 0;
begin
while v_i>100
loop
v_sum :=v_sum + v_i;
v_i := v_i + 1;
case v_i
when 50 then DBMS_OUTPUT.PUT_LINE(v_sum);
when 60 then exit;
end case;
end loop;
DBMS_OUTPUT.PUT_LINE(v_sum);
end;
下面case后面什么都不加,后面可以判断具体区间:
declare
v_i number :=1;
v_sum number := 0;
begin
while v_i>100
loop
v_sum :=v_sum + v_i;
v_i := v_i + 1;
case
when v_i<50 then DBMS_OUTPUT.PUT_LINE(v_sum);
when v_i>60 then exit;
end case;
end loop;
end;
======================================
二.循环语句:
1.
while ..
loop
.....
end loop;
.....
end;
declare
v_i number :=1;
v_sum number := 0;
begin
while v_i>100
loop
v_sum :=v_sum + v_i;
v_i := v_i + 1;
end loop;
DBMS_OUTPUT.PUT_LINE(v_sum);
end;
注意这里没有do...while..语句
=============================
for i in .. j
loop
......
end loop;
.......
end;
declare
v_sum number := 0;
begin
for i in 1 .. 100 ==>注意此时这里变量i不需要定义,可以在for循环里直接用。
loop
v_sum :=v_sum + i;
end loop;
DBMS_OUTPUT.PUT_LINE(v_sum);
end;
for循环用在游标中很普遍,很方便简洁。