PL/SQL程序結構學習 ------from-//ddvip.com
從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所示。
有的程序比較簡單,往往省略異常處理部分。