以下线程包含一些有关oracle中PACKAGES的有用提示/示例代码,论坛成员可能会觉得有用。
包是过程,函数,游标,全局变量等的集合。
包也作为对象存储在数据库中。
一个包有两个部分
1.包装------------规格。
2.包装体---放大。
注意:-
1.如果软件包不包含任何过程或功能,则软件包主体是可选的。
2.在包声明块中声明的所有变量都具有全局作用域。
在执行时,包成员必须通过包名称来限定。
它支持OVERLOADING。
一旦调用了程序包的任何成员,整个程序包就会被加载到内存中,从而避免了额外的往返。
样品包EX#1
====================
包装规格
-----------------------------------
CREATE OR REPLACE PACKAGE PACK1 AS
--The procedure is only declared with parametres.
PROCEDURE PROC1
(
NUM EMP.EMPNO%TYPE,
SS EMP.SAL%TYPE
);
--Function is declared here.
FUNCTION SPELLDATE
(
DD DATE
)
RETURN VARCHAR2;
END;
主体部分(实现)
-----------------------------------------------
CREATE OR REPLACE PACKAGE BODY PACK1 AS
--Here is the implimentation of the previously declared Pocedure.
PROCEDURE PROC1
(
NUM EMP.EMPNO%TYPE,
SS EMP.SAL%TYPE
)
AS
BEGIN
INSERT INTO EMP (EMPNO,SAL)VALUES(NUM,SS);
DBMS_OUTPUT.PUT_LINE('ONE RECORD INSERTED...!');
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
RAISE_APPLICATION_ERROR(-20001,'DUPLICATE ENTRY');
END PROC1;
--and the function is implemented here.
FUNCTION SPELLDATE
(
--receives date as input.
DD DATE
) RETURN VARCHAR2 AS
STR VARCHAR2(500);
BEGIN
SELECT TO_CHAR(DD,'DDSPTH MONTH YEAR') INTO STR FROM DUAL;
--returns the fully spelled out string of the entered date.
RETURN STR;
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20001,'SOME ERROR');
--If there is any error returns null.
RETURN NULL;
END SPELLDATE;
END PACK1;
样品包EX#2
====================
包装规格
--------------------------------------------
create or replace package my_pkg as
procedure my_proc(arg1 in varchar2);
function my_fun(arg1 in number) return varchar2;
end my_pkg;
-------------
包装体
----------------------------
create or replace package body my_pkg as
function my_private_fun(arg1 in number) return varchar2
is
return_val varchar2(20);
begin
select col1 into return_val from tab2 where col2=arg1;
return return_val;
exception
when NO_DATA_FOUND THEN
return 'Sorry no data found.....!';
end my_private_fun;
function my_fun(arg1 in number)return varchar2
is
begin
return my_private_fun(arg1);
end my_fun;
procedure my_proc(arg1 in varchar2)
is
begin
update tab1 set col1=col1+1 where col2=arg1;
end my_proc;
end my_pkg;
还要检查
PL / SQL包-2From: https://bytes.com/topic/oracle/insights/746981-pl-sql-package-1-a