package包的创建分为两部分,包规范和包体。
-
包定义:包定义部分是为应用程序的接口,声明包内数据类型、变量、常量、游标、子程序和异常错误处理等元素,这些元素为包的公有元素。
CREATE [OR REPLACE] PACKAGE package_name
{IS | AS}
[公有数据类型定义]
[公有游标声明]
[公有变量、常量声明]
[公有子程序声明]
END [package_name];
-
包主体:包主体则是包定义部分的具体实现,它定义了包定义部分所声明的游标和子程序,在包主体中还可以声明包的私有元素。如果在包主体中的游标或子程序并没有在包头中定义,那么这个游标或子程序是私有的。
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 版权协议,转载请附上原文出处链接和本声明。