什麼是PL/SQL程序 前面第
章學習的標准化的SQL語言對數據庫進行各種操作
每次只能執行一條語句
語句以英文的分號
;
為結束標識
這樣使用起來很不方便
同時效率較低
這是因為Oracle數據庫系統不像VB
VC這樣的程序設計語言
它側重於後台數據庫的管理
因此提供的編程能力較弱
而結構化編程語言對數據庫的支持能力又較弱
如果一些稍微復雜點的管理任務都要借助編程語言來實現的話
這對管理員來講是很大的負擔
正是在這種需求的驅使下
從Oracle
開始
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程序完成向該表中自動輸入
個記錄
要求recordnumber字段從
到
currentdate字段為當前系統時間
(
)前面建立的tempuser用戶默認的表空間為USERS
因此
要想使該用戶能夠使用表空間建立數據方案對象
必須首先給其賦予名為
RESOURCE
的角色
(
)以system用戶
SYSDBA身份登錄數據庫後
在【企業管理器】中按照修改用戶的步驟進行操作
直到出現如圖
所示的編輯用戶的【角色】選項卡
在【可用】下拉列表框中選擇
RESOURCE
單擊【箭頭向下】按鈕將其添加到【已授予】列表框中
【默認值】單元格被選中
單擊
確定
按鈕
(
)讀者也可以在【SQLPlus Worksheet】中直接執行如下SQL代碼完成上述操作
―――――――――――――――――――――――――――――――――――――
GRANT
RESOURCE
TO
TEMPUSER
;
ALTER USER
TEMPUSER
DEFAULT ROLE ALL
―――――――――――――――――――――――――――――――――――――
【配套程序位置】
第
章\grantrole
sql
(
)按照創建數據表的操作步驟進行
直到出現如圖
所示的創建表的【一般信息】選項卡
在【名稱】文本框中輸入
testable
在【方案】下拉列表框中選擇
tempuser
在【表空間】下拉列表框中選擇
users
選擇【表】/【標准】單選鈕
選擇【定義列】單選鈕
在【表列定義區】中輸入兩個數據列的定義
完成設置後單擊【創建】按鈕
(
)讀者也可以在【SQLPlus Worksheet】中直接執行如下SQL代碼完成上述操作
―――――――――――――――――――――――――――――――――――――
CREATE TABLE
TEMPUSER
TESTTABLE
(
RECORDNUMBER
NUMBER(
) NOT
NULL
CURRENTDATE
DATE NOT NULL)
TABLESPACE
USERS
―――――――――――――――――――――――――――――――――――――
【配套程序位置】
第
章\createtesttable
sql
(
)以tempuser用戶身份登錄【SQLPlus Worksheet】
執行下列SQL代碼完成向數據表tempuser
testable中輸入
個記錄的功能
執行結果如圖
所示
―――――――――――――――――――――――――――――――――――――
set serveroutput on
declare
maxrecords constant int:=
;
i int :=
;
begin
for i in
maxrecords loop
insert into tempuser
testtable(recordnumber
currentdate)
values(i
sysdate);
end loop;
dbms_output
put_line(
成功錄入數據!
);
commit;
end;
―――――――――――――――――――――――――――――――――――――
【配套程序位置】
第
章\inserttesttable
sql
(
)在【SQLPlus Worksheet】中執行下列語句
查詢插入的數據
結果如圖
所示
―――――――――――――――――――――――――――――――――――――
select * from tempuser
testtable;
―――――――――――――――――――――――――――――――――――――
【配套程序位置】
第
章\selecttesttable
sql
對完成上述數據插入過程的PL/SQL程序的分析如表
所示
表
PL/SQL實例代碼分析
程序代碼 說明
set serveroutput on 允許服務器輸出
declare 定義部分標識
maxrecords constant int:=
; 定義maxrecords為整型常量
i int :=
; 定義i為整型值變量
初值為
Begin 執行部分標識
for i in
maxrecords loop i從
循環到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程序結構可以分為
個部分
定義部分
以Declare為標識
在該部分中定義程序中要使用的常量
變量
游標和例外處理名稱
PL/SQL程序中使用的所有定義必須在該部分集中定義
而在高級語言裡變量可以在程序執行過程中定義
執行部分
以begin為開始標識
以end為結束標識
該部分是每個PL/SQL程序所必備的
包含了對數據庫的操作語句和各種流程控制語句
異常處理部分
該部分包含在執行部分裡面
以exception為標識
對程序執行中產生的異常情況進行處理
一個完整的PL/SQL程序的總體結構如圖
所示
有的程序比較簡單
往往省略異常處理部分
下面開始介紹PL/SQL的一些基本語法要素
From:http://tw.wingwit.com/Article/program/Oracle/201311/18995.html