PL SQL語言流程控制操作指南

2021-10-04 20:23:23 字數 4802 閱讀 3968

-- 條件控制

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語...