ORACLE package的创建和修改

  • Post author:
  • Post category:其他


package包的创建分为两部分,包规范和包体。

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

CREATE [OR REPLACE] PACKAGE package_name
  {IS | AS}
   [公有数据类型定义]
   [公有游标声明]
   [公有变量、常量声明]
   [公有子程序声明]
END   [package_name];
  1. 包主体:包主体则是包定义部分的具体实现,它定义了包定义部分所声明的游标和子程序,在包主体中还可以声明包的私有元素。如果在包主体中的游标或子程序并没有在包头中定义,那么这个游标或子程序是私有的。

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

与类相同,包中的程序元素也分为公用元素和私用元素两种,这两种元素的区别是他们允许访问的程序范围不同,即它们的作用域不同。公用元素不仅可以被包中的函数、过程所调用,也可以被包外的PL/SQL程序访问,而私有元素只能被包内的函数和过程序所访问。

包定义和包主体分开编译,并作为两部分分开的对象存放在数据库字典中。包定义一定要在包主体前面编译(包主体可以没有,但包定义一定要有) 包的名称和包体的名称要保持一致。

以下为举例:

如果给现有的包添加新的函数、过程等,直接在脚本中增加即可,然后带上原先的脚本和新添加的函数全部执行。

原:

create or replace package GsPolicyTotalFee is
  /**
  通过程序调用汇总销售推动费用 --by 20191211
  */
  procedure SortTotalFee(v_paymentStates varchar2,
                         v_SALESMANCODE  varchar2,
                         inSql           varchar2,
                         querySql        VARCHAR2);

end GsPolicyTotalFee;

create or replace package body GsPolicyTotalFee is

  procedure SortTotalFee(v_paymentStates VARCHAR2,
                         v_SALESMANCODE  VARCHAR2,
                         inSql           VARCHAR2,
                         querySql        VARCHAR2) is
    z_sql_str    varchar2(30000);
    f_sql_str    varchar2(30000);
    z_update_str varchar2(30000);
    f_update_str varchar2(30000);
    q_sql_str    varchar2(30000);
    a_sql_str    varchar2(30000);
    str_date     varchar2(2000);
    Type Cur IS Ref Cursor;
    vRefCur Cur;
    c_Cur   gsTotalFeesInfo%rowtype;
    count_num number;
  begin
    ********
  end SortTotalFee;
end GsPolicyTotalFee;

新:

create or replace package GsPolicyTotalFee is
  /**
  通过程序调用汇总销售推动费用 --by 20191211
  */
  procedure SortTotalFee(v_paymentStates varchar2,
                         v_SALESMANCODE  varchar2,
                         inSql           varchar2,
                         querySql        VARCHAR2);

  /**
  通过程序调用汇总销售推动费用 --by 20230315
  */
  procedure SortTotalFee364(v_paymentStates varchar2,
                            v_SALESMANCODE  varchar2,
                            inSql           varchar2,
                            querySql        VARCHAR2);

end GsPolicyTotalFee;

create or replace package body GsPolicyTotalFee is

  procedure SortTotalFee(v_paymentStates VARCHAR2,
                         v_SALESMANCODE  VARCHAR2,
                         inSql           VARCHAR2,
                         querySql        VARCHAR2) is
    z_sql_str    varchar2(30000);
    f_sql_str    varchar2(30000);
    z_update_str varchar2(30000);
    f_update_str varchar2(30000);
    q_sql_str    varchar2(30000);
    a_sql_str    varchar2(30000);
    str_date     varchar2(2000);
    Type Cur IS Ref Cursor;
    vRefCur Cur;
    c_Cur   gsTotalFeesInfo%rowtype;
    count_num number;
  begin
    *******

  end SortTotalFee;

  procedure SortTotalFee364(v_paymentStates VARCHAR2,
                            v_SALESMANCODE  VARCHAR2,
                            inSql           VARCHAR2,
                            querySql        VARCHAR2) is
    z_sql_str    varchar2(30000);
    f_sql_str    varchar2(30000);
    z_update_str varchar2(30000);
    f_update_str varchar2(30000);
    q_sql_str    varchar2(30000);
    a_sql_str    varchar2(30000);
    str_date     varchar2(2000);
    Type Cur IS Ref Cursor;
    vRefCur Cur;
    c_Cur   gsTotalFeesInfo%rowtype;
    count_num number;
  begin
    ********

  end SortTotalFee364;
end GsPolicyTotalFee;



版权声明:本文为lh1424573495原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。