国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

PL/SQL綜合實例

2024-07-21 02:40:38
字體:
來源:轉載
供稿:網友

 
    本節將在前面學習的PL/SQL基礎上分析一個較復雜的實例,以教會讀者編寫完整的PL/SQL程序的方法。

實例設計

    1. 功能設計
    某高校開發的研究生招生系統,要求設計PL/SQL程序對考生的成績數據進行處理,處理的邏輯是根據每門專業課的最低分數線和總分的最低分數線自動將考生歸類為錄取考生、調劑考生和落選考生。
    為此設計兩個數據表,graduate數據表存放考生成績,result數據表存放處理結果,PL/SQL程序完成的功能就是將graduate數據表中的數據逐行掃描,根據分數線進行判定,計算出各科總分,在result數據表中將標志字段自動添加上“錄取”或“落選”。
    2. 數據表設計
    Graduate數據表結構如表9.3所示。

(圖片較大,請拉動滾動條觀看)

(圖片較大,請拉動滾動條觀看)

(圖片較大,請拉動滾動條觀看)

創建數據表

    為了簡化起見,實例的兩個數據表都建立在默認的scott用戶下,這樣讀者可以完全模擬實例一致的環境進行學習。
    1. 創建graduate數據表
    在圖9.58所示的創建表的【一般信息】選項卡中按照下列步驟進行配置。
    在【名稱】文本框中輸入“GRADUATE”。
    在【方案】下拉列表框中選擇“SCOTT”。
    在【表空間】下拉列表框中選擇“USERS”。
    在【表結構定義區】按照圖所示進行設置。
    完成設置后單擊PL/SQL綜合實例按鈕。

(圖片較大,請拉動滾動條觀看)
    讀者也可以在【SQLPlus Worksheet】中執行下列SQL代碼,直接創建數據表SCOTT.GRADUATE。
    ――――――――――――――――――――――――――――――――――――――
    CREATE TABLE "SCOTT"."GRADUATE" (
        "BH" NUMBER(10) NOT NULL,
        "XM" VARCHAR2(10) NOT NULL,
        "LB" VARCHAR2(10) NOT NULL,
        "YINGYU" NUMBER(4, 1) NOT NULL,
        "ZHENGZHI" NUMBER(4, 1) NOT NULL,
        "ZHUANYE1" NUMBER(4, 1) NOT NULL,
        "ZHUANYE2" NUMBER(4, 1) NOT NULL,
        "ZHUANYE3" NUMBER(4, 1) NOT NULL)
    TABLESPACE "USERS"
    ――――――――――――――――――――――――――――――――――――――
    【配套程序位置】:第9章/ creategraduate.sql。
    2. 創建result數據表
    在圖9.59所示的創建表的【一般信息】選項卡中按照下列步驟進行配置。

    在【名稱】文本框中輸入“RESULT”。
    在【方案】下拉列表框中選擇“SCOTT”。
    在【表空間】下拉列表框中選擇“USERS”。
    在【表結構定義區】按照圖所示進行設置。
    完成設置后單擊PL/SQL綜合實例按鈕。
PL/SQL綜合實例
    讀者也可以在【SQLPlus Worksheet】中執行下列SQL代碼,直接創建數據表SCOTT.RESULT。
    ――――――――――――――――――――――――――――――――――――――
    CREATE TABLE "SCOTT"."RESULT" (
        "BH" NUMBER(10) NOT NULL,
        "XM" VARCHAR2(10) NOT NULL,
        "LB" VARCHAR2(10) NOT NULL,
        "YINGYU" NUMBER(4, 1) NOT NULL,
        "ZHENGZHI" NUMBER(4, 1) NOT NULL,
        "ZHUANYE1" NUMBER(4, 1) NOT NULL,
        "ZHUANYE2" NUMBER(4, 1) NOT NULL,
        "ZHUANYE3" NUMBER(4, 1) NOT NULL,
        "TOTALSCORE" NUMBER(5, 1) NOT NULL,
        "FLAG" VARCHAR2(4) NOT NULL)
    TABLESPACE "USERS"
    ――――――――――――――――――――――――――――――――――――――
    【配套程序位置】:第9章/ createresult.sql。

錄入數據

    利用【表數據編輯器】向SCOTT.GRADUATE數據表錄入下列實驗數據。如圖9.60所示。
PL/SQL綜合實例
    讀者也可以在【SQLPlus Worksheet】中執行下列SQL代碼,直接向數據表SCOTT.GRADUATE中錄入測試數據。

(圖片較大,請拉動滾動條觀看)

(圖片較大,請拉動滾動條觀看)
    【配套程序位置】:第9章/ insertgraduate.sql。

程序設計

    1. 創建處理過程scott.graduatePRocess
    在【SQLPlus Worksheet】中執行下列PL/SQL代碼,創建處理過程scott.graduateprocess。執行結果如圖9.61所示。
PL/SQL綜合實例
    ―――――――――――――――――――――――――――――――――――――
    /*定義過程參數*/
    create or replace procedure scott.graduateprocess(
        tempzhengzhi in scott.graduate.zhengzhi%type,
        tempyingyu in scott.graduate.yingyu%type,
        tempzhuanye1 in scott.graduate.zhuanye1%type,
        tempzhuanye2 in scott.graduate.zhuanye2%type,
        tempzhuanye3 in scott.graduate.zhuanye3%type,
        temptotalscore in scott.result.totalscore%type) as
    /*定義graduaterecord為記錄型變量,臨時存放通過游標從graduate數據表中提取的記錄*/
        graduaterecord scott.graduate%rowtype;
    /*定義graduatetotalscore為數值型變量,統計總分*/
        graduatetotalscore scott.result.totalscore%type;
    /*定義graduateflag為字符型變量,根據結果放入“落選”或“錄取”,然后寫入數據表result*/
        graduateflag varchar2(4);
    /*定義游標graduatecursor,存放的是所有的graduate數據表中的記錄*/
      cursor graduatecursor is
        select * from scott.graduate;
    /*定義異常處理errormessage*/
    errormessage exception;
    /*開始執行*/
    begin
       /*打開游標*/
      open graduatecursor;
    /*假如游標沒有數據,激活異常處理*/
      if graduatecursor%notfound then
         raise errormessage;
      end if;
    /*游標有數據,指針指向第一條記錄,每執行fetch命令,就自動下移,循環執行到記錄提取完畢為止*/
      loop
         fetch graduatecursor into graduaterecord;
    /*計算總分*/
    graduatetotalscore:=graduaterecord.yingyu+graduaterecord.zhengzhi+graduaterecord.zhuanye1+graduaterecord.zhuanye2
+graduaterecord.zhuanye3;
    /*判定單科和總分是否滿足錄取要求,若滿足,graduateflag變量值為“錄取”,否則為“落選”*/
    if (graduaterecord.yingyu>=tempyingyu and
        graduaterecord.zhengzhi>=tempzhengzhi and
        graduaterecord.zhuanye1>=tempzhuanye1 and
        graduaterecord.zhuanye2>=tempzhuanye2 and
        graduaterecord.zhuanye3>=tempzhuanye3 and
        graduatetotalscore>=temptotalscore) then
        graduateflag:='錄取';
    else
       graduateflag:='落選';
    end if;
    /*當游標數據提取完畢后,退出循環”*/
    exit when graduatecursor%notfound;
    /*向結果數據表result中插入處理后的數據*/
    insert into
    scott.result(bh,xm,lb,zhengzhi,yingyu,zhuanye1,zhuanye2,zhuanye3,totalscore,flag)
    values(graduaterecord.bh,graduaterecord.xm,graduaterecord.lb,graduaterecord.zhengzhi,graduate
    record.yingyu,graduaterecord.zhuanye1,graduaterecord.zhuanye2,graduaterecord.zhuanye3,graduat
    etotalscore,graduateflag);
    end loop;
    /*關閉游標*/
    close graduatecursor;
    /*提交結果*/
    commit;
    /*異常處理,提示錯誤信息*/
    exception
    when errormessage then
        dbms_output.put_line('無法打開數據表');
    /*程序執行結束”*/
    end;
    ―――――――――――――――――――――――――――――――――――――――――――
    【配套程序位置】:第9章/ creategraduateprocess.sql。

    2. 主程序mainprocess設計
    主程序調用名為graduateprocess的過程來完成處理,代碼設計如下:
    ―――――――――――――――――――――――――――――――――――――
    set serveroutput on
    /*定義6個入口變量,分別對應graduate數據表中的專業課和總分分數線*/
    declare
        score1 number(4,1);
        score2 number(4,1);
        score3 number(4,1);
        score4 number(4,1);
        score5 number(4,1);
        scoretotal number(5,1);
    /*將分數線賦值,在這里修改各值就代表不同的分數線*/
    begin
       score1:=50;
       score2:=56;
       score3:=60;
       score4:=62;
       score5:=64;
       scoretotal:=325;
    /*調用處理過程*/
       scott.graduateprocess(score1,score2,score3,score4,score5,scoretotal);
    end;
    ――――――――――――――――――――――――――――――――――――――――――――
    【配套程序位置】:第9章/ mainprocess.sql。
    在上述過程設計中,綜合使用了異常處理、游標、變量等PL/SQL程序設計要素,通過主程序向帶參數執行的過程傳遞參數。

執行結果

    1.第一組執行結果
    (1)將mainprocess.sql文件稍做改動,在【SQLPlus Worksheet】中執行下列PL/SQL程序,執行結果如圖9.62所示。
PL/SQL綜合實例

(圖片較大,請拉動滾動條觀看)

(圖片較大,請拉動滾動條觀看)
    【配套程序位置】:第9章/ mainprocess1.sql。
    (2)利用【表數據編輯器】查看scott.result數據表的結果,如圖9.63所示。
PL/SQL綜合實例
    2. 第二組執行結果
    (1)將mainprocess.sql文件稍做改動,在【SQLPlus Worksheet】中執行下列PL/SQL程序,執行結果如圖9.64所示。

(圖片較大,請拉動滾動條觀看)

(圖片較大,請拉動滾動條觀看)
    【配套程序位置】:第9章/ mainprocess1.sql。
    (2)利用【表數據編輯器】查看scott.result數據表的結果,如圖9.63所示。
PL/SQL綜合實例
    2. 第二組執行結果
    (1)將mainprocess.sql文件稍做改動,在【SQLPlus Worksheet】中執行下列PL/SQL程序,執行結果如圖9.64所示。


(圖片較大,請拉動滾動條觀看)

(圖片較大,請拉動滾動條觀看)
    【配套程序位置】:第9章/ mainprocess2.sql。
PL/SQL綜合實例
    (2)利用【表數據編輯器】查看scott.result數據表的結果,如圖9.65所示。
PL/SQL綜合實例
    綜合運用PL/SQL的設計要素,就可以設計出很多復雜的處理程序,這也是DBA的一項重要任務。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 喀喇| 闽清县| 新河县| 恭城| 建始县| 泰顺县| 府谷县| 盐边县| 任丘市| 上杭县| 响水县| 清苑县| 涿鹿县| 寿阳县| 岳池县| 郧西县| 沈阳市| 紫云| 遵义市| 洞头县| 从江县| 长汀县| 武鸣县| 娱乐| 蚌埠市| 新泰市| 灵宝市| 禹州市| 建瓯市| 沾益县| 资中县| 平利县| 通河县| 喀什市| 广州市| 阿拉善盟| 商洛市| 宿州市| 五原县| 长春市| 新河县|