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.
重载子程序的参数的类族必须不同
,
例如
,
由于
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 ;
ORACLE
内置包
1.DBMS_ALERT
包
:
用于数据库报警
,
允许会话间通信
2.DBMS_JOB:
用于任务调度服务
3.DBMS_LOB:
用于处理大对象操作
4.DBMS_PIPE
包
:
用于数据库管道
,
允许会话间通信
5.DBMS_SQL
包
:
用于执行动态
SQL
6.UTL_FILE
包
:
用于文件的输入输出
除了
UTL_FILE
包存储在服务器和客户端外
,
其他的包均存储在服务器中
.
分享到:
相关推荐
在本文中,我们将详细探讨Oracle中的打包方法,以及如何创建和管理自己的数据库包。 一、Oracle数据库包的基本概念 Oracle数据库包是一种高级的PL/SQL编程结构,它允许将相关的变量、过程和函数封装在一起,形成一...
oracle包调试.wmv
Oracle包应用详解(入门级)
在`gradle导入本地oracle包连接数据库`这个场景下,我们需要确保这个驱动包被正确地添加到Gradle项目的依赖管理中。 Gradle是基于Groovy语言的构建自动化工具,具有灵活的依赖管理和构建脚本。为了将`ojdbc6.jar`...
Oracle包生成参数工具是一款专为Oracle数据库开发人员设计的应用,旨在简化创建自定义数据库包的过程。这个工具通过提供直观的用户界面和丰富的参数配置选项,帮助开发者高效地生成符合特定需求的PL/SQL包。在Oracle...
Oracle包,通常指的是Oracle数据库相关的软件包或者编程接口(API),是开发者与Oracle数据库进行交互的重要工具。Oracle数据库是全球广泛使用的大型关系型数据库管理系统,它提供了强大的数据存储、管理和处理能力...
创建Oracle包的基本语法如下: ```sql CREATE OR REPLACE PACKAGE package_name AS -- 规范:声明过程和函数 PROCEDURE procedure_name (parameter_list); FUNCTION function_name (parameter_list) RETURN ...
《R语言与Oracle数据库交互——Roracle包详解》 在数据科学领域,R语言以其强大的统计分析和可视化功能被广泛使用。然而,当涉及到大型企业级数据库时,如Oracle,如何高效地进行数据交换和处理成为了一个关键问题...
linux rpm包telnet_server+安装oracle包 libaio-devel-0.3.106-3.2.i386.rpm telnet-server-0.17-38.el5.i386.rpm sysstat-7.0.0-3.el5.i386.rpm sysstat-7.0.2-3.el5.i386.rpm unixODBC-2.2.11-7.1.i386.rpm ...
ORACLE 包和包体的创建和使用,深入浅出。
centos6下python3连接oracle11g,cx_Oracle-6.2.1-cp36-cp36m-manylinux1_x86_64.whl,oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.rpm
linux X86_64 安装oracle11G RAC所需全部的oracle包: 为了在vmware下安装配置oracle11G的RAC环境,我用的是redhat linux5,找这个包简直费思老劲了,终于弄齐了,特拿来与后来者分享! 只需这一个包就足够使用了,...
安装plsql_oracle的联系包(不用自己下载,别人给了一个包, 我放在:D:\IT\plsql_oracle下) --tnasname.ora:在plsql_oracle这个包里面 2,配置oracle监听,即环境变量 右击我的电脑选”属性”->“高级”->“环境...
Oracle内置包是Oracle数据库系统提供的一系列预定义的PL/SQL包,这些包极大地扩展了数据库的功能,并简化了开发者在数据库层面的操作。Oracle内置包包括了处理数据、管理事务、控制用户访问、监控数据库性能等多个...
总结一下,cx_Oracle离线安装在Linux环境下,需要安装cx_Oracle的RPM包,并配置Oracle Instant Client,包括基本连接库和SDK。通过设置环境变量,确保Python能够正确地找到并使用这些组件。这个过程对于没有网络连接...
### 通过ORACLE的UTL_HTTP工具包发送包含POST参数的请求 #### 概述 在Oracle环境中,经常需要与外部系统进行交互,特别是在需要从Web服务器获取数据或向其发送数据的情况下。`UTL_HTTP`是Oracle提供的一款强大工具...
1、在某数据库服务器压缩oracle软件,假设$ORACLE_BASE=/opt/oracle/app/oracle/ # tar czvf /opt/oracle/app/Oracle_client.tar.gz /opt/oracle/app/oracle # chmod 777 /tmp/Oracle_client.tar.gz 2、在需要安装...
包含文件: Oracle SQL语法速查.chm Oracle函数手册.chm Oracle官方文档-Oracle错误代码.chm Oracle函数手册.chm oracle傻瓜1000问.chm Oracle性能优化-SQL编写的一般规则.chm
本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...
解决方法是检查一下系统是否安装了 bos.clvm 的包。 6. 解决裸设备权限问题 在安装 oracle rac 时 oracle 无法正常访问并行裸设备。解决方法是 export PGSD_SUBSYS=grpsvcs 在 oracle 用户下的.profile 里加入即可...