国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
oracle PL/SQL的基本構(gòu)成,結(jié)構(gòu)控制語(yǔ)句,分支結(jié)構(gòu),選擇結(jié)構(gòu),loop循環(huán)結(jié)構(gòu),...

關(guān)鍵字: oracle pl/sql 基本 構(gòu)成 結(jié)構(gòu) 控制 語(yǔ)句 分支 選擇 loop 循環(huán)
分支結(jié)構(gòu)
分支結(jié)構(gòu)是最基本的程序結(jié)構(gòu),分支結(jié)構(gòu)由IF語(yǔ)句實(shí)現(xiàn)。
使用IF語(yǔ)句,根據(jù)條件可以改變程序的邏輯流程。IF語(yǔ)句有如下的形式:
IF 條件1 THEN
語(yǔ)句序列1;
[ELSIF 條件2 THEN
語(yǔ)句序列2;
ELSE
語(yǔ)句序列n;]
END IF;
其中:
  條件部分是一個(gè)邏輯表達(dá)式,值只能是真(TRUE)、假(FALSE)或空(NULL)。
語(yǔ)句序列為多條可執(zhí)行的語(yǔ)句。
根據(jù)具體情況,分支結(jié)構(gòu)可以有以下幾種形式:
IF-THEN-END IF
IF-THEN-ELSE-END IF
IF-THEN-ELSIF-ELSE-END IF
1.IF-THEN-END IF形式
這是最簡(jiǎn)單的IF結(jié)構(gòu),練習(xí)如下:
【訓(xùn)練1】  如果溫度大于30℃,則顯示“溫度偏高”。
輸入并執(zhí)行以下程序:
Sql代碼
  1. SET SERVEROUTPUT ON  
  2.         DECLARE  
  3.          V_temprature       NUMBER(5):=32;   
  4.          V_result           BOOLEAN:=false;   
  5.          BEGIN  
  6.           V_result:= v_temprature >30;   
  7.          IF V_result THEN    
  8.             DBMS_OUTPUT.PUT_LINE('溫度'|| V_temprature ||'度,偏高');   
  9.          END IF;    
  10.         END;  

執(zhí)行結(jié)果為:
Sql代碼
  1. 溫度32度,偏高   
  2.         PL/SQL過(guò)程已成功完成。  

說(shuō)明:該程序中使用了布爾變量,初值為false,表示溫度低于30℃。表達(dá)式v_temprature >30返回值為布爾型,賦給邏輯變量V_result。如果變量v_temprature的值大于30,則返回值為真,否則為假。V_result值為真就會(huì)執(zhí)行IF到 END IF之間的輸出語(yǔ)句,否則沒(méi)有輸出結(jié)果。
試修改溫度的初值為25℃,重新執(zhí)行,觀察結(jié)果。
2.IF-THEN-ELSE-END IF形式
這種形式的練習(xí)如下:
【訓(xùn)練2】  根據(jù)性別,顯示尊稱。
輸入并執(zhí)行以下程序:
Sql代碼
  1. SET SERVEROUTPUT ON  
  2.         DECLARE  
  3.         v_sex   VARCHAR2(2);   
  4.         v_titil     VARCHAR2(10);   
  5. BEGIN  
  6.   v_sex:='男';   
  7.   IF v_sex ='男' THEN  
  8.     v_titil:='先生';   
  9.   ELSE  
  10.     v_titil:='女士';   
  11.   END IF;    
  12.   DBMS_OUTPUT.PUT_LINE(v_titil||'您好!');   
  13. END;  

執(zhí)行結(jié)果為:
Sql代碼
  1. 先生您好!   
  2.         PL/SQL 過(guò)程已成功完成。  

說(shuō)明:該程序根據(jù)性別顯示尊稱和問(wèn)候,無(wú)論性別的值為何,總會(huì)有顯示結(jié)果輸出。如果V_sex的值不是‘男’和‘女’,那么輸出結(jié)果會(huì)是什么?
【練習(xí)1】對(duì)以上程序進(jìn)行補(bǔ)充修改,在ELSE部分嵌入一個(gè)IF結(jié)構(gòu),如果V_sex的值不是'女',則顯示“朋友你好”。
3.IF-THEN-ELSIF-ELSE-END IF形式
這種形式的練習(xí)如下:
【訓(xùn)練3】  根據(jù)雇員工資分級(jí)顯示稅金。
輸入并運(yùn)行以下程序:
Sql代碼
  1. SET SERVEROUTPUT ON  
  2. DECLARE  
  3.   v_sal  NUMBER(5);   
  4.   v_tax  NUMBER(5,2);   
  5. BEGIN  
  6.   SELECT sal INTO v_sal   
  7.   FROM emp   
  8.   WHERE empno=7788;   
  9. IF v_sal >=3000 THEN    
  10.             V_tax:= v_sal*0.08;--稅率8%   
  11.          ELSIF v_sal>=1500 THEN  
  12.              V_tax:= v_sal*0.06; --稅率6%   
  13.         ELSE  
  14.              V_tax:= v_sal*0.04; --稅率4%   
  15.          END IF;   
  16.         DBMS_OUTPUT.PUT_LINE('應(yīng)繳稅金:'||V_tax);   
  17.         END;  

執(zhí)行結(jié)果為:
Sql代碼
  1. 應(yīng)繳稅金:240   
  2.         PL/SQL 過(guò)程已成功完成。  

說(shuō)明:該程序根據(jù)工資計(jì)算7788號(hào)雇員應(yīng)繳稅金,不同工資級(jí)別的稅率不同。
選擇結(jié)構(gòu)
CASE語(yǔ)句適用于分情況的多分支處理,可有以下三種用法。
1.基本CASE結(jié)構(gòu)
語(yǔ)句的語(yǔ)法如下:
CASE 選擇變量名
WHEN 表達(dá)式1 THEN
語(yǔ)句序列1
WHEN 表達(dá)式2 THEN
  語(yǔ)句序列2
WHEN 表達(dá)式n THEN
  語(yǔ)句序列n
ELSE
  語(yǔ)句序列n+1
END CASE;
在整個(gè)結(jié)構(gòu)中,選擇變量的值同表達(dá)式的值進(jìn)行順序匹配,如果相等,則執(zhí)行相應(yīng)的語(yǔ)句序列,如果不等,則執(zhí)行ELSE部分的語(yǔ)句序列。
以下是一個(gè)使用CASE選擇結(jié)構(gòu)的練習(xí)。
【訓(xùn)練1】  使用CASE結(jié)構(gòu)實(shí)現(xiàn)職務(wù)轉(zhuǎn)換。
輸入并執(zhí)行程序:
Sql代碼
  1. SET SERVEROUTPUT ON  
  2. DECLARE  
  3. v_job  VARCHAR2(10);   
  4. BEGIN  
  5. SELECT job INTO v_job   
  6. FROM emp   
  7. WHERE empno=7788;   
  8. CASE v_job   
  9. WHEN 'PRESIDENT' THEN    
  10.  DBMS_OUTPUT.PUT_LINE('雇員職務(wù):總裁');   
  11. WHEN 'MANAGER' THEN     
  12.  DBMS_OUTPUT.PUT_LINE('雇員職務(wù):經(jīng)理');   
  13. WHEN 'SALESMAN' THEN     
  14.  DBMS_OUTPUT.PUT_LINE('雇員職務(wù):推銷員');   
  15. WHEN 'ANALYST' THEN     
  16.  DBMS_OUTPUT.PUT_LINE('雇員職務(wù):系統(tǒng)分析員');   
  17. WHEN 'CLERK' THEN     
  18.  DBMS_OUTPUT.PUT_LINE('雇員職務(wù):職員');   
  19. ELSE     
  20.  DBMS_OUTPUT.PUT_LINE('雇員職務(wù):未知');   
  21. END CASE;   
  22. END;  

執(zhí)行結(jié)果:
Sql代碼
  1. 雇員職務(wù):系統(tǒng)分析員   
  2.         PL/SQL 過(guò)程已成功完成。   

說(shuō)明:以上實(shí)例檢索雇員7788的職務(wù),通過(guò)CASE結(jié)構(gòu)轉(zhuǎn)換成中文輸出。
【練習(xí)1】將雇員號(hào)修改成其他已知雇員號(hào),重新執(zhí)行。
2.表達(dá)式結(jié)構(gòu)CASE語(yǔ)句
在Oracle中,CASE結(jié)構(gòu)還能以賦值表達(dá)式的形式出現(xiàn),它根據(jù)選擇變量的值求得不同的結(jié)果。
它的基本結(jié)構(gòu)如下:
變量=CASE 選擇變量名
WHEN 表達(dá)式1 THEN 值1
WHEN 表達(dá)式2 THEN 值2
WHEN 表達(dá)式n THEN 值n
ELSE值n+1
END;
【訓(xùn)練2】  使用CASE的表達(dá)式結(jié)構(gòu)。
Sql代碼
  1. SET SERVEROUTPUT ON  
  2.         DECLARE  
  3.               v_grade   VARCHAR2(10);   
  4.              v_result   VARCHAR2(10);   
  5.         BEGIN  
  6.              v_grade:='B';   
  7.              v_result:=CASE v_grade   
  8.               WHEN 'A' THEN '優(yōu)'  
  9. WHEN 'B' THEN '良'  
  10.             WHEN 'C' THEN '中'  
  11.              WHEN 'D' THEN '差'  
  12.             ELSE '未知'  
  13.         END;   
  14.         DBMS_OUTPUT.PUT_LINE('評(píng)價(jià)等級(jí):'||V_result);   
  15.         END;  

執(zhí)行結(jié)果為:
Sql代碼
  1. 評(píng)價(jià)等級(jí):良   
  2.         PL/SQL 過(guò)程已成功完成。  

說(shuō)明:該CASE表達(dá)式通過(guò)判斷變量v_grade的值,對(duì)變量V_result賦予不同的值。
3.搜索CASE結(jié)構(gòu)
Oracle還提供了一種搜索CASE結(jié)構(gòu),它沒(méi)有選擇變量,直接判斷條件表達(dá)式的值,根據(jù)條件表達(dá)式?jīng)Q定轉(zhuǎn)向。
CASE
WHEN 條件表達(dá)式1 THEN
  語(yǔ)句序列1
WHEN 條件表達(dá)式2 THEN
  語(yǔ)句序列2
WHEN 條件表達(dá)式n THEN
  語(yǔ)句序列n
ELSE
  語(yǔ)句序列n+1
END CASE;
【訓(xùn)練3】  使用CASE的搜索結(jié)構(gòu)。
Sql代碼
  1. SET SERVEROUTPUT ON  
  2.         DECLARE  
  3.            v_sal    NUMBER(5);   
  4.         BEGIN  
  5.            SELECT sal INTO v_sal FROM emp    
  6.              WHERE empno=7788;   
  7.         CASE    
  8.             WHEN v_sal>=3000 THEN    
  9.         DBMS_OUTPUT.PUT_LINE('工資等級(jí):高');   
  10.              WHEN v_sal>=1500 THEN  
  11. DBMS_OUTPUT.PUT_LINE('工資等級(jí):中');   
  12.        ELSE  
  13.    DBMS_OUTPUT.PUT_LINE('工資等級(jí):低');   
  14. END CASE;   
  15. END;  

執(zhí)行結(jié)果為:
Sql代碼
  1. 工資等級(jí):高   
  2.         PL/SQL 過(guò)程已成功完成。   

說(shuō)明:此結(jié)構(gòu)類似于IF-THEN-ELSIF-ELSE-END IF結(jié)構(gòu)。本訓(xùn)練判斷7788雇員的工資等級(jí)。
循環(huán)結(jié)構(gòu)
循環(huán)結(jié)構(gòu)是最重要的程序控制結(jié)構(gòu),用來(lái)控制反復(fù)執(zhí)行一段程序。比如我們要進(jìn)行累加,則可以通過(guò)適當(dāng)?shù)难h(huán)程序?qū)崿F(xiàn)。PL/SQL循環(huán)結(jié)構(gòu)可劃分為以下3種:
* 基本LOOP循環(huán)。
* FOR LOOP循環(huán)。
* WHILE LOOP循環(huán)。
1.基本LOOP循環(huán)
基本循環(huán)的結(jié)構(gòu)如下:
LOOP --循環(huán)起始標(biāo)識(shí)
語(yǔ)句1;
  語(yǔ)句2;
EXIT [WHEN 條件];
END LOOP; --循環(huán)結(jié)束標(biāo)識(shí)
該循環(huán)的作用是反復(fù)執(zhí)行LOOP與END LOOP之間的語(yǔ)句。
EXIT用于在循環(huán)過(guò)程中退出循環(huán),WHEN用于定義EXIT的退出條件。如果沒(méi)有WHEN條件,遇到EXIT語(yǔ)句則無(wú)條件退出循環(huán)。
【訓(xùn)練1】 求:12+32+52+...+152 的值。
輸入并執(zhí)行以下程序:
Sql代碼
  1. SET SERVEROUTPUT ON  
  2.         DECLARE  
  3.          v_total        NUMBER(5):=0;   
  4.         v_count     NUMBER(5):=1;   
  5.         BEGIN  
  6.         LOOP   
  7.             v_total:=v_total+v_count**2;   
  8.             EXIT WHEN v_count=15;--條件退出   
  9. v_count:=v_count+2;   
  10.         END LOOP;   
  11.          DBMS_OUTPUT.PUT_LINE(v_total);   
  12.         END;  

輸出結(jié)果為:
Sql代碼
  1. 680   
  2.         PL/SQL 過(guò)程已成功完成。  

說(shuō)明:基本循環(huán)一定要使用EXIT退出,否則就會(huì)成為死循環(huán)。
【練習(xí)1】求1*2*3*4*...*10的值。
2.FOR LOOP循環(huán)
FOR循環(huán)是固定次數(shù)循環(huán),格式如下:
FOR 控制變量 in [REVERSE] 下限..上限
LOOP
語(yǔ)句1;
  語(yǔ)句2;
   END LOOP;
循環(huán)控制變量是隱含定義的,不需要聲明。
下限和上限用于指明循環(huán)次數(shù)。正常情況下循環(huán)控制變量的取值由下限到上限遞增,REVERSE關(guān)鍵字表示循環(huán)控制變量的取值由上限到下限遞減。
以下是FOR循環(huán)結(jié)構(gòu)的練習(xí)。
【訓(xùn)練2】  用FOR循環(huán)輸出圖形。
Sql代碼
  1. SET SERVEROUTPUT ON  
  2.         BEGIN  
  3.         FOR I IN 1..8    
  4.         LOOP   
  5.         DBMS_OUTPUT.PUT_LINE(to_char(i)||rpad('*',I,'*'));   
  6.         END LOOP;   
  7.         END;  

輸出結(jié)果為:
Sql代碼
  1. 1*   
  2. 2**   
  3. 3***   
  4. 4****   
  5. 5*****   
  6. 6******   
  7. 7*******   
  8. 8********   
  9.         PL/SQL 過(guò)程已成功完成。   

說(shuō)明:該程序在循環(huán)中使用了循環(huán)控制變量I,該變量隱含定義。在每次循環(huán)中根據(jù)循環(huán)控制變量I的值,使用RPAD函數(shù)控制顯示相應(yīng)個(gè)數(shù)的“*”。
【練習(xí)2】為以上程序增加REVERSE關(guān)鍵字,觀察執(zhí)行結(jié)果。
【訓(xùn)練3】  輸出一個(gè)空心三角形。
Sql代碼
  1. BEGIN    
  2.         FOR I IN 1..9   
  3.         LOOP    
  4.          IF I=1 OR I=9 THEN  
  5.          DBMS_OUTPUT.PUT_LINE(to_char(I)||rpad(' ',12-I,' ')||rpad('*',2*i-1,'*'));    
  6. ELSE  
  7.       DBMS_OUTPUT.PUT_LINE(to_char(I)||rpad(' ',12-I,' ')||'*'||rpad(' ',I*2-3,' ')||'*');    
  8.         END IF;   
  9.         END LOOP;    
  10.         END;  

輸出結(jié)果為:
Sql代碼
  1. 1           *   
  2. 2          * *   
  3. 3         *   *   
  4. 4        *     *   
  5. 5       *       *   
  6. 6      *         *   
  7. 7     *           *   
  8. 8    *             *   
  9. 9   *****************   
  10. PL/SQL 過(guò)程已成功完成。  

  說(shuō)明:該實(shí)例采用循環(huán)和IF結(jié)構(gòu)相結(jié)合,對(duì)第1行和第9行(I=1 OR I=9)執(zhí)行同樣的輸出語(yǔ)句,其他行執(zhí)行另外的輸出語(yǔ)句。
【練習(xí)3】修改程序,輸出一個(gè)實(shí)心三角形。
3.WHILE LOOP循環(huán)
WHILE循環(huán)是有條件循環(huán),其格式如下:
WHILE 條件
LOOP
語(yǔ)句1;
語(yǔ)句2;
END LOOP;
當(dāng)條件滿足時(shí),執(zhí)行循環(huán)體;當(dāng)條件不滿足時(shí),則結(jié)束循環(huán)。如果第一次判斷條件為假,則不執(zhí)行循環(huán)體。
以下是WHILE循環(huán)結(jié)構(gòu)的練習(xí)。
【訓(xùn)練3】 使用WHILE 循環(huán)向emp表連續(xù)插入5個(gè)記錄。
步驟1:執(zhí)行下面的程序:
Sql代碼
  1. SET SERVEROUTPUT ON  
  2. DECLARE  
  3. v_count NUMBER(2) := 1;   
  4. BEGIN  
  5.   WHILE v_count <6 LOOP   
  6.     INSERT INTO emp(empno, ename)   
  7.     VALUES (5000+v_count, '臨時(shí)');   
  8. v_count := v_count + 1;   
  9.   END LOOP;   
  10.   COMMIT;   
  11. END;  

輸出結(jié)果為:
Sql代碼
  1. PL/SQL 過(guò)程已成功完成。  

步驟2:顯示插入的記錄:
Sql代碼
  1. SELECT empno,ename FROM emp WHERE ename='臨時(shí)';  

輸出結(jié)果為:
   
Sql代碼
  1. EMPNO ENAME   
  2.         ------------------ ----------   
  3.       5001 臨時(shí)   
  4.       5002 臨時(shí)   
  5.       5003 臨時(shí)   
  6.       5004 臨時(shí)   
  7.       5005 臨時(shí)   
  8.         已選擇5行。  

步驟3:刪除插入的記錄:
Sql代碼
  1. DELETE FROM emp WHERE ename='臨時(shí)';   
  2.         COMMIT;  

輸出結(jié)果為:
Sql代碼
  1. 已刪除5行。   
  2.         提交完成。  

說(shuō)明:該練習(xí)使用WHILE循環(huán)向emp表插入5個(gè)新記錄(雇員編號(hào)根據(jù)循環(huán)變量生成),并通過(guò)查詢語(yǔ)句顯示新插入的記錄,然后刪除。
4.多重循環(huán)
循環(huán)可以嵌套,以下是一個(gè)二重循環(huán)的練習(xí)。
【訓(xùn)練4】 使用二重循環(huán)求1!+2!+...+10!的值。
步驟1:第1種算法:
Sql代碼
  1. SET SERVEROUTPUT ON  
  2. DECLARE  
  3.   v_total   NUMBER(8):=0;   
  4.   v_ni  NUMBER(8):=0;   
  5.   J     NUMBER(5);   
  6. BEGIN  
  7. FOR I IN 1..10   
  8.   LOOP   
  9.     J:=1;   
  10.       v_ni:=1;   
  11.     WHILE J<=I   
  12.     LOOP   
  13.       v_ni:= v_ni*J;   
  14.       J:=J+1;   
  15.     END LOOP;--內(nèi)循環(huán)求n!   
  16. v_total:=v_total+v_ni;   
  17.   END LOOP;--外循環(huán)求總和   
  18.   DBMS_OUTPUT.PUT_LINE(v_total);   
  19. END;  

輸出結(jié)果為:
Sql代碼
  1. 4037913   
  2. PL/SQL 過(guò)程已成功完成。  

步驟2:第2種算法:
Sql代碼
  1. SET SERVEROUTPUT ON  
  2. DECLARE  
  3.   v_total       NUMBER(8):=0;   
  4.   v_ni      NUMBER(8):=1;   
  5. BEGIN  
  6.   FOR I IN 1..10   
  7.   LOOP   
  8.     v_ni:= v_ni*I;  --求n!   
  9.     v_total:= v_total+v_ni;   
  10.   END LOOP;     --循環(huán)求總和   
  11.   DBMS_OUTPUT.PUT_LINE(v_total);   
  12. END;  

輸出結(jié)果為:
Sql代碼
  1. 409114   
  2.         PL/SQL 過(guò)程已成功完成。   

說(shuō)明:第1種算法的程序內(nèi)循環(huán)使用WHILE循環(huán)求階層,外循環(huán)使用FOR循環(huán)求總和。第2種算法是簡(jiǎn)化的算法,根據(jù)是:n!=n*(n?1)!。


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ORACLE PL/SQL編程詳解之三:
存儲(chǔ)過(guò)程基礎(chǔ)語(yǔ)法解析
Oracle--plsql游標(biāo)創(chuàng)建和使用
詳解Oracle數(shù)據(jù)庫(kù)如何查找未使用綁定變量的SQL語(yǔ)句
Oracle PL/SQL開(kāi)發(fā)入門(第六彈:控制語(yǔ)句)
第三章plsql 流程控制
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服