-- 條件控制
if 條件表示式 then
語句塊endif
;if 條件表示式 then
語句塊1
else
語句塊2
endif
;
示例
-- 判斷員工是否有獎金,公升薪政策
declare
t_empno emp.empno%
type
; t_comm emp.comm%
type
;begin
t_empno :=
&eno;
select comm into t_comm from emp where empno=t_empno;
dbms_output.put_line(
'原來的獎金'
||t_comm)
;if t_comm =
''or t_comm is
null
then
update emp set comm = sal *
0.2where empno=t_empno;
elsif t_comm <
1000
then
update emp set comm =
1000
where empno=t_empno;
else
update emp set comm = comm *
1.1where empno=t_empno;
endif
; exception
when no_data_found then
dbms_output.put_line(
'員工編號為'
||t_empno||
'的員工不存在');
end;
case 表示式
when 條件表示式的結果 then
待執行的語句塊
when 條件表示式的結果 then
待執行的語句塊
endcase
;
示例:
-- 輸出員工的工資等級(1000以下為c,1000-2000為b,2000以上為a)
declare
t_sal emp.sal%
type
;begin
select sal into t_sal from emp where empno=
&emp;
case
when t_sal<
1000
then
dbms_output.put_line(
'c級');
when t_sal<
2000
and t_sal>=
1000
then
dbms_output.put_line(
'b級');
when t_sal>=
2000
then
dbms_output.put_line(
'a級');
endcase
;end
;
while 條件表示式 loop 語句段;
exit
when 條件表示式
endloop
;
示例:
-- 列印出從deptno從1到3的部門名稱
declare
v_dname varchar2(10)
; v_i number(
2):=1;
begin
while v_i <=
3loop
select dname into v_dname from
(select dname from dept where deptno=v_i)
; dbms_output.put_line(v_dname)
; v_i := v_i +1;
endloop
;end
;
for 迴圈變數 in
[reverse] 初始值表示式.
.終止值表示式 loop
語句段;
endloop
;
示例:
-- 列印出從deptno從1到3的部門名稱
declare
v_dname dept.dname%
type
;begin
for v_i in
1..3
loop
select dname into v_dname from
(select dname from dept where deptno=v_i)
; dbms_output.put_line(v_dname)
;end
loop
;end
;
-- 自定義異常
declare
no_updata exception;
begin
delete
from dept where deptno=11;
ifsql
%notfound then
raise no_updata;
endif
; exception
when no_updata then
dbms_output.put_line(
'未找到待刪除的資料');
end;
包含以上所有流程,部分進行調整,可直接複製貼上,親測可用
declare
t_empno emp.empno%
type
; t_ename emp.ename%
type
; t_comm emp.comm%
type
; t_sal emp.sal%
type
; t_emp emp%rowtype;
v_i number(
10):=
7500
; no_updata exception;
begin
-- while
while v_i<
8000
loop
begin
select ename,comm,sal into t_ename,t_comm,t_sal from
(select ename,comm,sal from emp where empno=v_i)
; dbms_output.put_line(t_ename)
; exception
when others then
dbms_output.put_line(
'無資料');
end;
v_i:=v_i +1;
endloop
;-- for
for t_emp in
(select
*from emp)
loop
select ename,comm,sal into t_ename,t_comm,t_sal from
(select ename,comm,sal from emp where empno=t_emp.empno)
; dbms_output.put(t_ename||
'工資為:'
||t_sal||
' ');
-- if else
if t_comm =
''or t_comm is
null
then
dbms_output.put(t_ename||
'無獎金 ');
else
dbms_output.put(t_ename||
'獎金為:'
||t_comm||
' ');
endif
;-- case
case
when t_sal<
1000
then
dbms_output.put(t_ename||
'的工資等級為c級 ');
when t_sal<
2000
and t_sal >
1000
then
dbms_output.put(t_ename||
'的工資等級為b級 ');
when t_sal>=
2000
then
dbms_output.put(t_ename||
'的工資等級為a級 ');
endcase
; dbms_output.put_line('')
;end
loop
;-- exception
delete
from emp where empno=1;
ifsql
%notfound then
raise no_updata;
endif
; exception
when no_updata then
dbms_output.put_line(
'未找到待刪除的資料');
end;
PLSQL程式設計 流程控制
1.條件分支 語法 created on 2018 8 23 by mengmeng.chen declare local variables here i integer begin test statements here if 條件1 then 執行1 elsif 條件2 then 執行2 e...
PL SQL流程控制語法
set serveroutput on ed 開啟text editer 並輸出結果 dbms output.put line helloword 輸出語句 執行輸出。v sal varchar2 10 0 賦值語句 例子declare v sal sc.score type 獲取相同資料型別 v ...
PL SQL之 流程控制語句
一 簡介 像程式語言一樣,oracle pl sql也有自己的流程控制語句。通過流程控制語句,我們可以在pl sql中實現一下比較複雜的業務邏輯操作。而無需到程式中去控制,在一定程度上提高了效率,這也是pl sql的強大之處。pl sql流程控制語句有如下幾種 二 語句種類 1 控制語句 a if語...