Oracle pl/sql的進階--控制結構(分支,迴圈,控制)
阿新 • • 發佈:2018-12-24
<strong>:pl/sql的進階--控制結構(分支,迴圈,控制) pl/sql的進階--控制結構 介紹 在任何計算機語言(c,java,pascal)都有各種控制語句(條件語句,迴圈結構,順序控制結構...)在pl/sql中也存在這樣的控制結構。 在本部分學習完成後,希望大家達到: 1.使用各種if語句 2.使用迴圈語句 3.使用控制語句——goto和null; 條件分支語句 pl/sql中提供了三種條件分支語句if—then,if – then – else,if – then – elsif – then 這裡我們可以和java語句進行一個比較 簡單的條件判斷 if – then 問題:編寫一個過程,可以輸入一個僱員名,如果該僱員的工資低於2000,就給該員工工資增加10%。 Sql程式碼 1.create or replace procedure sp_pro6(spName varchar2) is 2.--定義 3.v_sal emp.sal%type; 4.begin 5. --執行 6. select sal into v_sal from emp where ename=spName; 7. --判斷 8. if v_sal<2000 then 9. update emp set sal=sal+sal*10% where ename=spName; 10. end if; 11.end; 12./ 二重條件分支 if – then – else 問題:編寫一個過程,可以輸入一個僱員名,如果該僱員的補助不是0就在原來的基礎上增加100;如果補助為0就把補助設為200; Sql程式碼 1.create or replace procedure sp_pro6(spName varchar2) is 2.--定義 3.v_comm emp.comm%type; 4.begin 5. --執行 6. select comm into v_comm from emp where ename=spName; 7. --判斷 8. if v_comm<>0 then 9. update emp set comm=comm+100 where ename=spName; 10. else 11. update emp set comm=comm+200 where ename=spName; 12. end if; 13.end; 14./ 多重條件分支 if – then – elsif – then 問題:編寫一個過程,可以輸入一個僱員編號,如果該僱員的職位是PRESIDENT就給他的工資增加1000,如果該僱員的職位是MANAGER就給他的工資增加500,其它職位的僱員工資增加200。 Sql程式碼 1.create or replace procedure sp_pro6(spNo number) is 2. --定義 3. v_job emp.job%type; 4.begin 5. --執行 6. select job into v_job from emp where empno=spNo; 7. if v_job='PRESIDENT' then 8. update emp set sal=sal+1000 where empno=spNo; 9. elsif v_job='MANAGER' then 10. update emp set sal=sal+500 where empno=spNo; 11. else 12. update emp set sal=sal+200 where empno=spNo; 13. end if; 14.end; 15./ 迴圈語句 –loop 是pl/sql中最簡單的迴圈語句,這種迴圈語句以loop開頭,以end loop結尾,這種迴圈至少會被執行一次。 案例:現有一張表users,表結構如下: 使用者id | 使用者名稱 | 請編寫一個過程,可以輸入使用者名稱,並迴圈新增10個使用者到users表中,使用者編號從1開始增加。 Sql程式碼 1.create or replace procedure sp_pro6(spName varchar2) is 2.--定義 :=表示賦值 3. v_num number:=1; 4.begin 5. loop 6. insert into users values(v_num,spName); 7. --判斷是否要退出迴圈 8. exit when v_num=10; 9. --自增 10. v_num:=v_num+1; 11. end loop; 12.end; 13./ 迴圈語句 –while迴圈 基本迴圈至少要執行迴圈體一次,而對於while迴圈來說,只有條件為true時,才會執行迴圈體語句,while迴圈以while...loop開始,以end loop結束。 案例:現有一張表users,表結構如下: 使用者id 使用者名稱 問題:請編寫一個過程,可以輸入使用者名稱,並迴圈新增10個使用者到users表中,使用者編號從11開始增加。 Sql程式碼 1.create or replace procedure sp_pro6(spName varchar2) is 2.--定義 :=表示賦值 3. v_num number:=11; 4.begin 5. while v_num<=20 loop 6. --執行 7. insert into users values(v_num,spName); 8. v_num:=v_num+1; 9. end loop; 10.end; 11./ 迴圈語句 –for迴圈 基本for迴圈的基本結構如下 Sql程式碼 1.begin 2. for i in reverse 1..10 loop 3. insert into users values (i, 'shunping'); 4. end loop; 5.end; 我們可以看到控制變數i,在隱含中就在不停地增加。 順序控制語句 –goto,null 1.goto語句 goto語句用於跳轉到特定符號去執行語句。注意由於使用goto語句會增加程式的複雜性,並使得應用程式可讀性變差,所以在做一般應用開發時,建議大家不要使用goto語句。 基本語法如下 goto lable,其中lable是已經定義好的標號名, Sql程式碼 1.declare 2. i int := 1; 3.begin 4. loop 5. dbms_output.put_line('輸出i=' || i); 6. if i = 1{} then 7. goto end_loop; 8. end if; 9. i := i + 1; 10. end loop; 11. <<end_loop>> 12. dbms_output.put_line('迴圈結束'); 13.end; 2.null null語句不會執行任何操作,並且會直接將控制傳遞到下一條語句。使用null語句的主要好處是可以提高pl/sql的可讀性。 Sql程式碼 1.declare 2. v_sal emp.sal%type; 3. v_ename emp.ename%type; 4.begin 5. select ename, sal into v_ename, v_sal from emp where empno = &no; 6. if v_sal < 3000 then 7. update emp set comm = sal * 0.1 where ename = v_ename; 8. else 9. null; 10. end if; 11.end; </strong>