茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1669365 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_60D_00229.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

DB研討會 : [轉貼]PL/SQL - 基本用法 判斷式, 迴圈

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]PL/SQL - 基本用法 判斷式, 迴圈

PL/SQL - 基本用法 判斷式, 迴圈

在Programming界中有一句話深刻的描述了程式語言的特性:

這句話完完全全的說明了其實寫程式並不難,
回到本文,
前面講解了PL/SQL的程式架構,
接著要來介紹PL/SQL中程式語言最基本的邏輯語法 - 判斷式與迴圈。


IF ELSE

if else是最基本也是最常用的邏輯判斷式,
程式根據所設置的條件來選擇執行哪一個分支,
以下是PL/SQL中IF ELSE的程式架構:

IF    condition1
THEN
         statements
[     ELSIF    condition2
THEN
        statments    ]
[     ELSE

        last_statements    ]
END IF;

這裡較特別的是condition後面要加上THEN,
ELSE後面則不用加THEN,
整個IF ELSE區塊要以END IF作為結束,
以下為IF ELSE範例程式:



DECLARE
A VARCHAR2(1) := 'N';
BEGIN
IF A = 'Y'
THEN
DBMS_OUTPUT.PUT_LINE('YES');
ELSIF A = 'N'
THEN
DBMS_OUTPUT.PUT_LINE('NO');
ELSE
DBMS_OUTPUT.PUT_LINE('UNKNOW');
END IF;
END;



CASE

case也就是程式語言中的switch case,
switch case為if else的變形,
其實switch case可以直接用if else進行實作,
但是會較複雜,
而case還分為兩種形式,
simple與searched CASE statement,
以下為 PL/SQL中 simple  CASE 的程式架構:

CASE    selector
        WHEN    expression1     THEN    statements
        [     WHEN    expression2     THEN    statements    ]
        ....
        [     ELSE
   statements    ]

END CASE;

simple case statement主要是以selector的值作為選擇對象,

expression作為selector值的選擇分支。
simple  CASE 範例程式碼:



DECLARE
grade VARCHAR2(1) := 'A';
BEGIN
CASE grade
WHEN 'A' THEN
DBMS_OUTPUT.PUT_LINE('EXCELLENT');
WHEN 'B' THEN
DBMS_OUTPUT.PUT_LINE('VERY GOOD');
WHEN 'C' THEN
DBMS_OUTPUT.PUT_LINE('GOOD');
ELSE
DBMS_OUTPUT.PUT_LINE('UNKNOW');
END CASE;
END;


接著我們來看searched CASE的程式架構:



CASE
         WHEN    condition1     THEN    statements
        [     WHEN     condition 2     THEN    statements    ]
        ....
        [     ELSE    statements    ]
END CASE;

searched CASE與simple  CASE的差異在於searched使用condition替代expression,
使用condition就能變得較彈性,
但要控制好condition之間的互斥。
searched CASE 範例程式碼:




DECLARE
grade VARCHAR2(1) := 'A';
BEGIN
CASE
WHEN grade = 'A' THEN
DBMS_OUTPUT.PUT_LINE('EXCELLENT');
WHEN grade = 'B' THEN
DBMS_OUTPUT.PUT_LINE('VERY GOOD');
WHEN grade = 'C' THEN
DBMS_OUTPUT.PUT_LINE('GOOD');
ELSE
DBMS_OUTPUT.PUT_LINE('UNKNOW');
END CASE;
END;


FOR LOOP

當預先知道迴圈次數的情況下,
可以使用for loop,
以下為FOR LOOP程式架構:

FORloop_counter IN[ REVERSE] lower_bound .. upper_bound
LOOP
        statements
END LOOP;

這裡要注意的是進行動作的statement區塊要放置於LOOP與END LOOP中,
如果有REVERSE關鍵字出現,
迴圈就會從 upper_bound開始遞減執行至 lower_bound。
FOR LOOP範例程式碼:



BEGIN
FOR i IN 1..10
LOOP
DBMS_OUTPUT.PUT_LINE(i);
END LOOP;
END;


輸出結果:1 2 3 4 5 6 7 8 9 10


LOOP(無窮迴圈)

Simple Loop是PL/SQL較特別的迴圈,
從上面FOR LOOP來看,
我們可以發現FOR LOOP程式架構中包含了Simple Loop,
Simple Loop本身是個無窮迴圈,
需要加上停止條件才能夠跳出,
以下為Simple Loop的程式碼架構:

LOOP
        statements
        EXIT WHEN condition;
END LOOP;


當condition條件成立時會跳出LOOP。
LOOP範例程式碼:




DECLARE
i INTEGER := 1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(i);
i := i + 1;
EXIT WHEN i = 10;
END LOOP;
END;



輸出結果:1 2 3 4 5 6 7 8 9


WHILE

while loop是根據條件式來判斷迴圈是否繼續進行,
與上述LOOP EXIT WHEN是相同的,
不同的是while是要先判斷條件是在進行迴圈,
且判斷式是相反的,
while判斷式成立就繼續迴圈,
而LOOP EXIT判斷的時機點可以自行選定,
以下為WHILE LOOP的程式碼架構:

WHILEcondition
LOOP
        statement
END LOOP;

WHILE範例程式碼:


DECLARE
i INTEGER := 1;
BEGIN
WHILE i <= 10
LOOP
DBMS_OUTPUT.PUT_LINE(i);
i := i + 1;
END LOOP;
END;


原文出處:PL/SQL - 基本用法 判斷式, 迴圈
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]oracle 條件分支用法 oracle 之 if..else 用法

oracle條件分支用法 oracle 之if..else用法

oracle 條件分支用法


a.if...then


b.if...then... else


c.if...then... elsif.... else

實例 1


問題:編寫一個過程,可以輸入一個僱員名,如果該僱員的工資低於 2000,就給該員工工資增加 10 %
create or replace procedure sp_pro6( spName varchar2) is v_sal emp_copy.sal %type ;

begin

select sal into v_sal from emp_copy where ename=
spName;

if v_sal<2000 then

update emp_copy set sal= sal*1.1 where ename= spName;

end if;

end;

實例 2


問題:編寫一個過程,可以輸入一個僱員名,如果該僱員的 補助不是 0就在原來的基礎上增加 100;如果補助為 0就把補助設為 200

create or replace procedure sp_pro6( spName varchar2) is

v_comm emp_copy.comm %type;

begin

select
comm into v_comm from emp_copy where ename= spName;

if v_comm<>0 then

update emp_copy set comm= comm+100 where ename= spName;

else

update emp_copy set comm= comm+200 where ename= spName;

end if;

end;

實例 3

多重條件分支
if
then

elsif then .


問題:編寫一個過程,可以輸入一個僱員編號,如果該僱員的職位是 PRESIDENT


給他的工資增加 1000,如果該僱員的職位是 MANAGER就給他的工資增加 500,其它


職位的僱員工資增加 200


create or replace procedure sp_pro6( spNo number) is

v_job emp_copy.job %type;

begin

select job into v_job from emp_copy where empno= spNo;

if v_job='PRESIDENT'
then

update emp_copy set sal= sal+1000 where empno= spNo;

elsif v_job='MANAGER'
then

update emp_copy set sal= sal+500 where empno= spNo;

else

update emp_copy set sal= sal+200 where empno= spNo;

end if;

end;


原文出處:oracle条件分支用法 oracle 之if..else用法 - zzm628的专栏 - CSDN博客
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|