【PLSQL】package包的使用,plsqlpackage包
************************************************************************ ****原文:blog.csdn.net/clark_xu 徐長亮的專欄************************************************************************包package
package是一個可以將相關Object Storage Service在一起的PLSQL結構,Package包含兩個分量的組成部分:specification包聲明,body(聲明中的程式實現,包體)。每個部分都單獨的儲存在資料字典中。包聲明時一個操作的介面,對應用來說是可見的。包體是黑盒,對應用來說隱藏了實現的細節
包的組成包括:
過程,函數,變數,遊標(定義一條sql語句),類型(定義符合類型),常量,異常
包的優點:
---方便對應過程和函數的組織,解決命名衝突
---方便對過程和函數的組織:不改變包的聲明定義,改變包的包體;
---限制過程和函數的依賴性
---在包體為實現時候,其他程式可以釣魚保重的對象,對自己程式進行編譯;
---方便對過程和函數的安全性管理:包的訪問授權只需一次性授權,區分公用過程和私用程序;
---改善效能:在包首次被調用的時候,一個整體全部放入記憶體,減少多次調用的磁碟IO;
3.8.1 匿名塊
--過程和函數只能在本匿名塊中調用,例如;
declare
v_n1 number :=1;
function fun1 (p_in number ) return number ls
begin
return p_in
end;
procedure proc1 ls
begin
dbms_output.put_lin(fun1(v_n1));
end;
begin
proc1;
end;
3.8.2 package的文法
包頭聲明:
create or replace package pkg_name {ls | as }
公開變數(varibale)的定義;
公用類型(type)的定義;
公用遊標(cursor)的定義;
函數說明;
過程說明;
end;
--package body聲明的文法;
create or replace package body pkg_name
ls | as
--調用一次執行一次
函數實現
--調用一次執行一次
過程實現
begin
--初始化代碼
--首次調用包中任意對象執行一次
end;
3.8.3 包Package的使用
包的聲明
create or replace packeage pkg1
ls
--公用類型
type t_rec is record
(m1 number,m2 varchar2(10));
--公開變數
v_rec t_rec ;
--公用過程
procedure proc1;
--公用函數
function fun1(p_in number) return number;
end
包體的實現
create or replace packeage pkg1
ls
--實現過程
procedure proc1
ls
begin
dbms_outpurt.put_lin(v_rec.m1);
end;
--實現函數
function fun1(p_in number) return number
ls
begin
return p_in
end;
--初始化代碼
begin
v_rec.m1 :=100;
end;
調用package
begin
pkg1.v_rec.m1 :=pkg1.fun1(10);
pkg1.proc1;
end;
************************************************************************ ****原文:blog.csdn.net/clark_xu 徐長亮的專欄************************************************************************