oracle packages怎么用,Oracle中packages的使用

包体 :

CREATE OR REPLACE PACKAGE BODY test_package

IS

/* 函数实现开始 */

FUNCTION average

(cnum IN char)

RETURN NUMBER;

AS

avger NUMBER;

BEGIN

SELECT AVG(CJ) INTO avger FROM XS_KC WHERE KCH=cnum GROUP BY KCH;

RETURN(avger);

END average;

/* 函数实现结束 */

/* 过程实现开始 */

PRODURE student_grade

(CUR OUT select_table.cur_04);

AS

OPEN CUR FOR

SELECT XS.XH ,XS.XM,KC.KCM,XS_KC.CJ

FROM XS ,XS_KC,KC

WHERE XS.XH =XS_KC.XH AND XS_KC.KCH=KC.KCH;

END student_grade;

/* 过程实现结束 */

END test_package;

重载 : 包中的函数和过程可以重载

以下条件不能重载 :

1. 如果两个子程序的参数仅在名称和类型上不同 , 这两个程序不能重载。

PROCEDURE overloadME(p_theparameter IN number);

PROCEDURE overloadME(p_theparameter OUT number);

IN ,OUT 为参数类型 ,number 为数据类型。两个过程仅在类型上不同时不能重载 。

2. 不能根据两个函数的返回类型对其重载

如 :

FUNCTION overloadMeEToo RETURN DATE;

FUNCTION overloadMeEToo RETURN NUMER;

3. 重载子程序的参数的类族必须不同 , 例如 , 由于 CHAR 和 VARCHAR2 属性同一类族 , 所以不能重载 。

PROCEDURE overloadME(p_theparameter IN char);

PROCEDURE overloadME(p_theparameter IN varchar2);

4. 打包子程序也可以重载

5. 包的初始化 。

当第一次调用打包子程序时 , 该包将进行初始化 。 也就是说 , 将该包从硬盘中读入到内存 , 并启用调用的子程序的编译代码 。 这时 , 系统为该包中定义的所有变量分配内存单元 。 每个会话都有打其打开包变量的副本 , 以确保执行同一个包子程序的两个会话使用不同的内存单元 。

在大多数情况下 , 初始化代码要在包第一次初始化时运行 。 为了实现这一功能 , 可以在包体中的所有对象之后加入一个初始化代码 .

语法格式 :

CREATE OR REPLACE PACKAGE BODY package_name

IS|AS

............

BEGIN

Initialization_code;-- 要运行的初始化代码

END ;

1.DBMS_ALERT 包 : 用于数据库报警 , 允许会话间通信

2.DBMS_JOB: 用于任务调度服务

3.DBMS_LOB: 用于处理大对象操作

4.DBMS_PIPE 包 : 用于数据库管道 , 允许会话间通信

5.DBMS_SQL 包 : 用于执行动态 SQL

6.UTL_FILE 包 : 用于文件的输入输出

除了 UTL_FILE 包存储在服务器和客户端外 , 其他的包均存储在服务器中 。

在编译包的过程中,出现了如下的错误:

1、Error:PLS-00323: 子程序或游标 已在程序包说明中声明, 必须在程序包体中对其进行定义。

错误原因:包头里面定义的函数和包体里面函数的参数不同,出现的错误。

2、如果编译完成,在执行时,包是不会提示错误的,此时就需要自己来查找错误。我使用的方法是在过程中将sql调好之后再放到包中运行。0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值