包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;