************************************************************************ ****原文:blog.csdn.net/clark_xu 徐長亮的專欄 ************************************************************************
包package
package是一個能夠將相關對象存儲在一起的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 徐長亮的專欄 ************************************************************************