打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ORACLE 包

ORACLE

包的作用:包可以将任何出现在块声明的语句(过程,函数,游标,游标,类型,变量)放于包中,相当于一个容器.将声明语句放入包中的好处是:用户可以从其他PL/SQL块中对其进行引用,因此包为PL/SQL提供了全程变量.

包分为两部分:包头和包体.

如何创建包?

1)包头:

语法格式:

CREATE OR REPLACE PACKAGE package_name /*包头名称*/

IS|AS pl/sql_package_spec /*定义过程,函数以及返回类型,变量,常量及数据类型定义*/

定义包头应当遵循以下原则:

1)包元素位置可以任意安排.然而在声明部分,对象必须在引用前进行声明.

2)包头可以不对任何类型的元素进行说明.例如,包头可以只带过程和函数说明语句,而不声明任何异常和类型.

3)对过程和函数的任何声明都必须只对子程序和其参数进行描述,不能有任何代码的说明,代码的实现只能在包体中出现.它不同于块声明,在块声明中,过程和函数的代码可同时出现在声明部分.

2.包体:

语法格式:

CREATE OR REPLACE PACKAGE BODY package_name/*包名必须与包头的包名一致*/

IS | AS pl/sql_package_body /*游标,函数,过程的具体定义*/

包体是与包头相互独立的,包体只能在包头完成编译后才能进行编译.包体中带有包头中描述的子程序的具体实现的代码段.除此之外,包体还可以包括具有包体人全句属性的附加声明部分,但这些附加声明对于包头是不见的.

EG:定义一个包头

CREATE OR REPLACE PACKAGE select_table

IS

TYPE tab_02 IS RECORD

(

itnum_1 varchar2(1),

itnum_2 varchar2(1)

);

TYPE tab_03 IS RECORD

(

itnum_1 varchar2(1),

itnum_2 varchar2(1),

itnum_3 varchar2(1)

);

TYPE tab_04 IS RECORD

(

itnum_1 varchar2(1),

itnum_2 varchar2(1),

itnum_3 varchar2(1),

itnum_4 varchar2(1)

);

TYPE tab_05 IS RECORD

(

itnum_1 varchar2(1),

itnum_2 varchar2(1),

itnum_3 varchar2(1),

itnum_4 varchar2(1),

itnum_5 varchar2(1)

);

TYPE tab_06 IS RECORD

(

itnum_1 varchar2(1),

itnum_2 varchar2(1),

itnum_3 varchar2(1),

itnum_4 varchar2(1),

itnum_5 varchar2(1),

itnum_6 varchar2(1)

);

TYPE cur_02 IS REF CURSOR RETURN tab_02;

TYPE cur_03 IS REF CURSOR RETURN tab_03;

TYPE cur_04 IS REF CURSOR RETURN tab_04;

TYPE cur_05 IS REF CURSOR RETURN tab_05;

TYPE cur_06 IS REF CURSOR RETURN tab_06;

END select_tab;

EG:

CREATE OR REPLACE PACKAGE test_package

IS

FUNCTION average

(cnum IN char)

RETURN NUMBER;

PRODURE student_grade

(CUR OUT select_table.cur_04);--CUR的数据类型是select_table包中cur_o4

END test_package;

包体:

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.重载子程序的参数的类族必须不同,例如,由于CHARVARCHAR2属性同一类族,所以不能重载 .

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 ;

ORACLE 内置包

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

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

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

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

5.DBMS_SQL:用于执行动态SQL

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

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ORACLE package包中的存储过程的定义和使用
Oracle函数
如何将Oracle表里的数据导出成insert into脚本?
【新提醒】[分享知识 原创连载]剖析ORACLE ERP R12 各模块业务逻辑和表关系
oracle千万级数据分页存储过程优化
输出oracle 对象源码
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服