亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

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的一項重要任務。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人在线影院| 亚洲综合中文字幕在线| 国产免费亚洲高清| 亚洲精品成a人在线观看| 日韩免费视频在线观看| 亚洲一区二区三区乱码aⅴ| 国产欧美日韩综合精品| 成人97在线观看视频| 成人欧美一区二区三区在线湿哒哒| 国产精品免费久久久久久| 欧美日产国产成人免费图片| 亚洲精品国产美女| 亚洲精品中文字| 亚洲一区av在线播放| 美女精品视频一区| 欧美日韩亚洲精品一区二区三区| 欧美寡妇偷汉性猛交| 国产精品久久久久久久午夜| 成人av色在线观看| 国产精品偷伦免费视频观看的| 欧美成人免费网| 久久久久国产精品免费网站| 久久久久国产精品免费| 91福利视频在线观看| 亚洲精品国产综合久久| 亚洲国产精品va| 一本大道亚洲视频| 国产精品入口免费视频一| 国产精品久久久久久久久久久久久久| 国产成人精品免高潮费视频| 日韩中文字幕在线视频播放| 国产拍精品一二三| 91在线看www| 亚洲的天堂在线中文字幕| 亚洲人成网站777色婷婷| 国语自产精品视频在免费| 久久久久久久91| 国产精品大片wwwwww| 久久国产精品偷| 国产精品劲爆视频| 国产日韩欧美在线看| 91久久久久久久久久久| 久久久人成影片一区二区三区观看| 一区二区福利视频| 国产日本欧美一区二区三区在线| 欧美激情中文字幕在线| 亚洲va欧美va国产综合久久| 日韩在线观看网站| 日韩欧美a级成人黄色| 亚洲大胆人体视频| 亚洲片国产一区一级在线观看| 亚洲免费福利视频| 黑人巨大精品欧美一区二区免费| 日韩视频永久免费观看| 欧美在线一区二区三区四| 日韩女优人人人人射在线视频| 亚洲a成v人在线观看| 欧美黄色片视频| 欧美视频在线观看免费网址| 国产精品99久久久久久久久| 国产丝袜精品第一页| 亚洲va欧美va国产综合久久| 国产日韩欧美在线播放| 久久免费视频观看| 国产福利视频一区| 国产午夜精品全部视频在线播放| 欧美另类交人妖| 俺也去精品视频在线观看| 福利一区视频在线观看| 欧美黑人xxx| 欧美专区日韩视频| 久久国产精品影片| 亚洲人免费视频| 91精品国产91| 最好看的2019的中文字幕视频| 国产精品综合不卡av| 国产精品久久久久999| 国产精品久久二区| 国产性猛交xxxx免费看久久| 欧美第一黄网免费网站| 成人免费高清完整版在线观看| 91免费电影网站| 精品无码久久久久久国产| 久久99精品久久久久久琪琪| 亚洲一区二区三区成人在线视频精品| 亚洲国产成人在线视频| 91亚洲国产成人久久精品网站| 日韩av在线导航| 亚洲国产精品久久| 日韩电影在线观看免费| 久久精品久久久久久国产 免费| 亚洲黄色片网站| 日韩av片永久免费网站| 日韩有码在线电影| 中文字幕精品久久| 精品视频www| 欧美亚洲国产成人精品| 亚洲综合av影视| 尤物yw午夜国产精品视频明星| 在线激情影院一区| 国内成人精品一区| 亚洲国产天堂久久综合| 日韩动漫免费观看电视剧高清| 日韩精品中文字幕视频在线| 欧美日韩在线免费| 国产精品久久久久免费a∨| 精品久久久久久中文字幕大豆网| 精品视频在线播放| 国产精品久久激情| 色小说视频一区| 欧美激情国产日韩精品一区18| 国产欧美精品xxxx另类| 韩国视频理论视频久久| 日韩av在线精品| 国语自产偷拍精品视频偷| 国产精品久久久久久久久久久不卡| 北条麻妃一区二区三区中文字幕| 亚洲网站在线播放| 亚洲成年人影院在线| 国产亚洲欧美日韩一区二区| 成人精品一区二区三区电影免费| 欧美激情一级精品国产| xx视频.9999.com| 亚洲精品在线看| 亚洲免费成人av电影| 久久国产精品亚洲| 国产日韩欧美在线视频观看| 亚洲成人1234| 国产精品日韩在线一区| 中国china体内裑精亚洲片| 中文字幕国产精品| 欧美中文字幕视频在线观看| 亚洲大胆人体在线| 91精品视频专区| 亚洲成人a**站| 精品美女国产在线| 精品香蕉一区二区三区| 亚洲缚视频在线观看| 精品久久久免费| 国产精品爽爽ⅴa在线观看| 国产日韩欧美在线播放| 91精品国产精品| 欧美日韩性生活视频| 精品国产区一区二区三区在线观看| 国产精品爱啪在线线免费观看| 国产精品嫩草视频| 亚洲免费小视频| 精品亚洲一区二区三区四区五区| 91精品久久久久| 日韩欧美在线视频免费观看| 国产精品丝袜久久久久久不卡| 精品国产91久久久久久| 久久黄色av网站| 国产日韩综合一区二区性色av| 久久精品视频在线| 国产精品高潮视频| 日韩欧美精品在线观看| 美女啪啪无遮挡免费久久网站| 亚洲视频视频在线| 日av在线播放中文不卡| 欧亚精品在线观看| 亚洲欧美日韩久久久久久| 羞羞色国产精品| 欧美日韩在线视频观看|