程序包

作者: Reaq | 来源:发表于2018-02-04 22:10 被阅读0次
    • 程序包
    (1)包是一种将过程、函数和数据结构捆绑在一起的容器,当包中任何函数或存储过程被调用,包就被加载入内存。
    (2)包中的任何函数或存储过程的子程序访问速度将大大加快。
    (3)包由两个部分组成:包头和包体,在包头中描述变量、常量、游标、和子程序。
    (4)包体由完整的子程序,游标定义组成。
    (5)可以简化应用设计、提高应用性能、实现信息隐藏、子程序重载
    (6)需要先创建package(也就是包的定义),再创建body。增加包中的过程或者修改包中过程的输入参数个数等也是要先改package再改body。
    
    • 组成
    规范(Package)
        即包头,相当于Java中的包,封装很多的函数以及过程--接口
    主体(Package Body)
        包里面具体的实现函数以及过程 --实现接口
    
    
    • 语法
    规范语法
        create or replace package 包名
        as
        begin
        -- 定义函数,过程,游标类型
        ...
        end;
    
    主题语法
        create or replace package body 包名
        as
        begin
            --实现函数,过程,游标类型
            ...
        end
    
    调用
        begin
            包名.过程名(值);
        end
    

    示例:

    以下内容为转载:
    参考链接:
    Oracle中包(PACKAGE)的使用方法

    • 创建包示例:
      包头--定义了一个函数和一个过程:
    CREATE OR REPLACE PACKAGE test_pkg IS
      PROCEDURE update_sal(e_name VARCHAR2,newsal NUMBER);
      FUNCTION ann_income(e_name VARCHAR2) RETURN NUMBER;
    END;
    

    包体--实现上面的函数和过程:

    CREATE OR REPLACE PACKAGE BODY test_pkg IS
      PROCEDURE update_sal(e_name VARCHAR2,newsal NUMBER)
      IS
      BEGIN
        UPDATE emp1 SET sal=newsal WHERE ename=e_name;
      END;
    
      FUNCTION ann_income(e_name VARCHAR2) RETURN NUMBER 
      IS
        annsal NUMBER;
      BEGIN
        SELECT sal*12+NVL(comm,0) INTO annsal FROM emp1 WHERE ename=e_name;
      RETURN annsal;
      END;
    END;
    
    • 调用包示例:
      对包内共有元素的调用格式为:包名.元素名称。
    对包内过程调用:
    SQL> exec test_pkg.update_sal('SCOTT',1200);
    
    对包内函数调用:
    DECLARE
      v_annsal NUMBER(7,2);
    BEGIN
      v_annsal:=test_pkg.ann_income('SCOTT');
      dbms_output.put_line('年薪为:'||v_annsal);
    END;
    
    • 删除包示例
      删除包:
      DROP PACKAGE BODY [user.]package_name;
      DROP PACKAGE [user.]package_name;

    相关文章

      网友评论

          本文标题:程序包

          本文链接:https://www.haomeiwen.com/subject/ocsvzxtx.html