PL/SQL程式結構

來源:互聯網
上載者:User
什麼是PL/SQL程式

    前面第4章學習的標準化的SQL語言對資料庫進行各種操作,每次只能執行一條語句,語句以英文的分號“;”為結束標識,這樣使用起來很不方便,同時效率較低,這是因為Oracle資料庫系統不像VB、VC這樣的程式設計語言,它側重於後台資料庫的管理,因此提供的編程能力較弱,而結構化程式設計語言對資料庫的支援能力又較弱,如果一些稍微複雜點的管理工作都要藉助程式設計語言來實現的話,這對管理員來講是很大的負擔。
    正是在這種需求的驅使下,從Oracle 6開始,Oracle公司在標準SQL語言的基礎上發展了自己的PL/SQL(Procedural Language/SQL,過程化SQL語言)語言,將變數、控制結構、過程和函數等結構化程式設計的要素引入了SQL語言中,這樣就能夠編製比較複雜的SQL程式了,利用PL/SQL語言編寫的程式也稱為PL/SQL程式塊。
    PL/SQL程式塊的主要特點如下。
    具有模組化的結構。
    使用過程化語言控制結構。
    能夠進行錯誤處理。
    PL/SQL程式塊只能在【SQL Plus】、【SQLPlus Worksheet】等工具支援下以解釋型方式執行,不能編譯成可執行檔,脫離支撐環境執行。

PL/SQL執行個體分析

    下面將為前面建立的tempuser使用者建立一個名為testtable的資料表。
    在該表中有recordnumber整數型欄位和currentdate時間型欄位,編製一個PL/SQL程式完成向該表中自動輸入100個記錄,要求recordnumber欄位從1到100,currentdate欄位為當前系統時間。
    (1)前面建立的tempuser使用者預設的資料表空間為USERS,因此,要想使該使用者能夠使用資料表空間建立資料方案對象,必須首先給其賦予名為“RESOURCE”的角色。
    (2)以system使用者、SYSDBA身份登入資料庫後,在【企業管理器】中按照修改使用者的步驟進行操作,直到出現如圖9.1所示的編輯使用者的【角色】選項卡。
    在【可用】下拉式清單方塊中選擇“RESOURCE”,單擊按鈕將其添加到【已授予】列表框中。【預設值】儲存格被選中,單擊“確定”按鈕。

    (3)讀者也可以在【SQLPlus Worksheet】中直接執行如下SQL程式碼完成上述操作。
    ―――――――――――――――――――――――――――――――――――――
    GRANT "RESOURCE" TO "TEMPUSER";
    ALTER USER "TEMPUSER" DEFAULT ROLE ALL
    ―――――――――――――――――――――――――――――――――――――
    【配套程式位置】:第9章\grantrole.sql。
    (4)按照建立資料表的操作步驟進行,直到出現如圖9.2所示的建立表的【一般資訊】選項卡。
    在【名稱】文字框中輸入“testable”。
    在【方案】下拉式清單方塊中選擇“tempuser”。
    在【資料表空間】下拉式清單方塊中選擇“users”。
    選擇【表】/【標準】單選鈕。
    選擇【定義列】單選鈕。
    在【表列定義區】中輸入兩個資料列的定義。
    完成設定後單擊按鈕。

    (5)讀者也可以在【SQLPlus Worksheet】中直接執行如下SQL程式碼完成上述操作。
    ―――――――――――――――――――――――――――――――――――――
    CREATE TABLE "TEMPUSER"."TESTTABLE" ("RECORDNUMBER" NUMBER(4) NOT
        NULL, "CURRENTDATE" DATE NOT NULL)
        TABLESPACE "USERS"
    ―――――――――――――――――――――――――――――――――――――
    【配套程式位置】:第9章\createtesttable.sql。
    (6)以tempuser使用者身份登入【SQLPlus Worksheet】,執行下列SQL程式碼完成向資料表tempuser.testable中輸入100個記錄的功能。執行結果如圖9.3所示。
    ―――――――――――――――――――――――――――――――――――――
    set serveroutput on
    declare
        maxrecords constant int:=100;
        i int :=1;
    begin
        for i in 1..maxrecords loop
           insert into tempuser.testtable(recordnumber,currentdate)
           values(i,sysdate);
        end loop;
    dbms_output.put_line('成功錄入資料!');
    commit;
    end;
    ―――――――――――――――――――――――――――――――――――――
    【配套程式位置】:第9章\inserttesttable.sql。

    (7)在【SQLPlus Worksheet】中執行下列語句,查詢插入的資料,結果如圖9.4所示。
    ―――――――――――――――――――――――――――――――――――――
    select * from tempuser.testtable;
    ―――――――――――――――――――――――――――――――――――――
    【配套程式位置】:第9章\selecttesttable.sql。

    對完成上述資料插入過程的PL/SQL程式的分析如表9.1所示。
表9.1 PL/SQL執行個體程式碼分析
程式碼 說明
set serveroutput on 允許伺服器輸出
declare 定義部分標識
maxrecords constant int:=100; 定義maxrecords為整型常量100
i int :=1; 定義i為整型值變數,初值為1
Begin 執行部分標識
for i in 1..maxrecords loop i從1迴圈到maxrecords
Insert into tempuser.testtable(recordnumber,currentdate) values (i,sysdate); 向資料表中插入資料
end loop; 結束迴圈
dbms_output.put_line('成功錄入資料!'); 顯示成功錄入資料資訊
commit; 提交結果
end; 結束執行

    表中的sysdate為系統時間函數;dbms_output為系統預設的程式包,put_line為包中定義的方法,功能是輸出資訊;在Oracle中,所有對資料庫資料的更改並沒有直接操作資料庫,而是放在叫工作區的記憶體裡,只有在commit語句執行後,才發生永久更改。

PL/SQL程式結構

    結合上述執行個體進行分析,完整的PL/SQL程式結構可以分為3個部分。
    1. 定義部分
    以Declare為標識,在該部分中定義程式中要使用的常量、變數、遊標和例外處理名稱,PL/SQL程式中使用的所有定義必須在該部分集中定義,而在進階語言裡變數可以在程式執行過程中定義。
    2. 執行部分
    以begin為開始標識,以end為結束標識。該部分是每個PL/SQL程式所必備的,包含了對資料庫的動作陳述式和各種流程式控制制語句。
    3. 異常處理部分
    該部分包含在執行部分裡面,以exception為標識,對程式執行中產生的異常情況進行處理。一個完整的PL/SQL程式的總體結構如圖9.5所示。

    有的程式比較簡單,往往省略異常處理部分。下面開始介紹PL/SQL的一些基本文法要素。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.