我們一直在列舉說明pl/sql的包的用途。但是包的本質是什麼的?個人理解,pl/sql包的本質就是「全區域性」。
換句話來講全域性使用的東西,需要在包來定義。
一般來說,在無名塊、或者過程和函式的本地定義部中定義的內容只能在本pl/sql塊中使用。
從這個意義上來說,這是乙個本地(區域性)的定義部。
所謂本地的定義部,無名塊是在declare和begin之間進行定義的;
在過程和函式的情況下,是在is和begin之間定義的。
作為複習,簡單的列出下面的例子:
<無名塊>
delcare
本地宣告部分
begin
執行部end;
《過程》
create procedure 程式名稱(臨時引數 資料型)
is本地宣告部分
begin
執行部end;
在本地定義部定義的內容只能在該pl/sql塊(無名塊、過程、功能)中使用。
那麼,想在各個pl/sql塊都可以使用的變數的話,怎麼定義呢,那就是包,需要在包裡邊進行定義。
作為回憶,下邊是包申明的格式:
《包申明部》
create package 包名
is各種定義(變數、常數、例外、游標、型別、過程、函式等)
end;
例如上述是包申明部的語法。一般來說,is開始到最後整體都是申明部。僅僅是個申明,還需要實現的定義。
包的實現部和申明部一樣,可以說也是乙個申明部。
《包實現部》
create package body 包名
is定義變數;
過程和函式的具體實現;
end;
如上所述,包定義從is到最後也可以說都是在定義內容。
剛才,pl/sql的包的本質是「全域性定義部」,這個指的是包的申明部分的定義內容。
而包實現部分定義的內容,其他使用者不能直接使用,只能是本地內容,不叫全域性定義部。
所以包定義部分的內容,本質上和包的本質是不一樣的,是區域性的,和普通的plsql塊是一樣是一樣的。
不管怎麼說,從利用包功能的使用者的觀點來看,包申明部申明的東西可以直接在全域性上利用,
是超越了pl/sql模組框架的共同申明部的。
例如:變數、常數、游標、型別、例外、過程、函式等,都可以在包的申明部進行申明,供全域性使用。
補充一下,據我所知,只有游標變數不能儲存在包裡。
這就是個人對包的本質上的解釋。
PLSQL入門到精通(第6章 異常)
前一次我們針對select into做了簡單的說明,本次針對他的異常處理進行解釋。我們用文字的方式進行編輯,儲存到 test.sql檔案中。可以通過sql plusl來執行text.sql。執行方法不在敘述 test.sql檔案的內容 set serveroutput on set verify o...
PLSQL入門與精通(第4章 變數之 TYPE)
上一章,介紹了變數的定義,這一次繼續深入介紹變數。變數定義域 變數名 變數型別 除此之外,我們介紹一下變數定義中經常使用的東西。以下是變數定義的新的一種方法 變數定義域 變數名 表名.列名 type 該方法是變數定義是 用指定表 或檢視 中指定列的型別來定義變數和型別 也就是說,不是直接指定資料型別...
PL SQL 第3章 包 的示例
第3章 包 建立包規範 create package emp pkg is procedure update sal name varchar2,newsal number function income name varchar2 return number end 建立包體 create pac...