zoukankan      html  css  js  c++  java
  • Oracle——package....包的概念和定义

    包的概念和特点:

      在一个大型项目中,可能有很多模块,而每个模块又有自己的过程、函数等。、而这些过程、函数默认是放在一起的(如在PL/SQL中,过程默认都是放在一起 的,即Procedures中),这些非常不方便查询和维护,甚至会发生误删除的事件。

      PL/SQL为了满足程序模块化的需要,引入了包的构造。通过使用包就可以分类管理过程和函数等。

    (1)包是一种数据库对象,相当于一个容器。将逻辑上相关的过程、函数、变量、常量和游标组合成一个更大的单位。用户可以从其他 PL/SQL 块中对其进行引用

    (2)包类似于C++和JAVA语言中的类,其中变量相当于类中的成员变量,过程和函数相当于类方法。把相关的模块归类成为包,可使开发人员利用面向对象的方法进行开发,具有面向对象程序设计语言的特点,

    (4)PL/SQL的包具有信息隐蔽性(information hiding),仅在算法和数据结构设计有关层可见。可将过程说明和过程体组成一个程序单位。也可将过程说明与它的过程体分开。也可在包中定义过程,而该过程在包说明中没有定义过程说明,这样定义的过程仅在包内使用。

    (5)在PL/SQL程序设计中,使用包不仅可以使程序设计模块化,对外隐藏包内所使用的信息(通过使用私用变量),而写可以提高程序的执行效率。因为,当程序首次调用包内函数或过程时,ORACLE将整个包调入内存,当再次访问包内元素时,ORACLE直接从内存中读取,而不需要进行磁盘I/O操作,从而使程序执行效率得到提高。

    包结构和定义

    一个包由两个分开的部分组成:包规范包体

    包定义(PACKAGE)

    包定义部分是为应用程序的接口,声明包内数据类型、变量、常量、游标、子程序和异常错误处理等元素,这些元素为包的公有元素。

    CREATE [OR REPLACE] PACKAGE package_name
    
    {IS | AS}
    
    [公有数据类型定义]
    [公有游标声明]
    [公有变量、常量声明]
    [公有子程序声明]
    
    END [package_name];
    ----实例
    
    CREATE OR REPLACE PACKAGE PACKAGENAME
    
     IS
    
      PROCEDURE P1(A VARCHAR2,I  OUT NUMBER);
      PROCEDURE P2(A VARCHAR2, I  OUT NUMBER);
      PROCEDURE P3(A VARCHAR2/*,I  OUT NUMBER*/);
      ....
    END;

    包主体(PACKAGE BODY)

    包主体(PACKAGE BODY):包主体则是包定义部分的具体实现,它定义了包定义部分所声明的游标和子程序,在包主体中还可以声明包的私有元素。

    如果在包主体中的游标或子程序并没有在包头中定义,那么这个游标或子程序是私有的。

    CREATE [OR REPLACE] PACKAGE BODY package_name
    
    {IS | AS}
    
                       [私有数据类型定义]
    
                       [私有变量、常量声明]
    
                       [私有子程序声明和定义]
    
                       [公有子程序定义]
    
    BEGIN
    
                       执行部分(初始化部分)
    
    END [package_name];
    
    --实例

    CREATE OR REPLACE PACKAGE BODY PACKAGE1 IS
    PROCEDURE P1(A IN VARCHAR2,
    I OUT NUMBER
    )
    IS

    C VARCHAR2(32000);
    D VARCHAR2(32000);
    BEGIN
    .....
    END;

    PROCEDURE P2(A IN VARCHAR2,
    I OUT NUMBER
    )
    IS
    C VARCHAR2(32000);
    D VARCHAR2(32000);
    BEGIN
    .....
    END;

    PROCEDURE P3(A IN VARCHAR2,
    )
    IS
    BEGIN
    .....
    END;
    END PACKAGE1;

    与类相同,包中的程序元素也分为公用元素和私用元素两种,这两种元素的区别是他们允许访问的程序范围不同,即它们的作用域不同。

    公用元素不仅可以被包中的函数、过程所调用,也可以被包外的PL/SQL程序访问,而私有元素只能被包内的函数和过程序所访问。

    包定义和包主体分开编译,并作为两部分分开的对象存放在数据库字典中。

    包定义一定要在包主体前面编译,包主体可以没有,但包定义一定要有) 包的名称和包体的名称要保持一致。



    自强不息,厚德载物
  • 相关阅读:
    网页制作之JavaScript部分3--事件及事件传输方式(函数调用 练习题 )重要---持续更新中
    网页制作之JavaScript部分 2
    网页制作之JavaScript部分 1
    css之display:inline-block与float区别(可以尝试用一下)
    边框圆角化方式(原文链接http://www.cnblogs.com/SJP666/p/4678730.html)
    网页制作之html基础学习5-background-position用法
    网页制作之html基础学习4-格式与布局
    网页制作之html基础学习3-css样式表
    网页制作之html基础学习2-标签
    程序员的成长必备
  • 原文地址:https://www.cnblogs.com/zhoufei2514/p/10750410.html
Copyright © 2011-2022 走看看