PL / SQL包-1

本文深入解析Oracle数据库中的包概念,包括包的组成部分、作用域、过载特性及如何创建和使用包。通过两个示例包,详细展示了包规范与包体的编写方法,以及如何在包中实现过程和函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下线程包含一些有关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包-2

From: https://bytes.com/topic/oracle/insights/746981-pl-sql-package-1-a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值