`
cjh820425
  • 浏览: 155395 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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. 重载子程序的参数的类族必须不同 , 例如 , 由于 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包在数据库编程中扮演着重要的角色,它是一种高级的PL/SQL组织形式,用于实现模块化和信息隐藏,从而提升代码的复用性和效率。本文将深入解析Oracle包的概念、作用及其定义。 首先,Oracle包是PL/SQL提供的一...

    怎么用oracle打包

    在本文中,我们将详细探讨Oracle中的打包方法,以及如何创建和管理自己的数据库包。 一、Oracle数据库包的基本概念 Oracle数据库包是一种高级的PL/SQL编程结构,它允许将相关的变量、过程和函数封装在一起,形成一...

    oracle包调试 视频

    oracle包调试.wmv

    Oracle包应用详解(入门级)

    Oracle包应用详解(入门级)

    gradle导入本地oracle包连接数据库

    在`gradle导入本地oracle包连接数据库`这个场景下,我们需要确保这个驱动包被正确地添加到Gradle项目的依赖管理中。 Gradle是基于Groovy语言的构建自动化工具,具有灵活的依赖管理和构建脚本。为了将`ojdbc6.jar`...

    Oracle包生成参数工具

    Oracle包生成参数工具是一款专为Oracle数据库开发人员设计的应用,旨在简化创建自定义数据库包的过程。这个工具通过提供直观的用户界面和丰富的参数配置选项,帮助开发者高效地生成符合特定需求的PL/SQL包。在Oracle...

    oracle包

    Oracle包,通常指的是Oracle数据库相关的软件包或者编程接口(API),是开发者与Oracle数据库进行交互的重要工具。Oracle数据库是全球广泛使用的大型关系型数据库管理系统,它提供了强大的数据存储、管理和处理能力...

    一个简单的oracle过程被使用的例子,包含架包

    创建Oracle包的基本语法如下: ```sql CREATE OR REPLACE PACKAGE package_name AS -- 规范:声明过程和函数 PROCEDURE procedure_name (parameter_list); FUNCTION function_name (parameter_list) RETURN ...

    Roracle_1.3-1.tar

    《R语言与Oracle数据库交互——Roracle包详解》 在数据科学领域,R语言以其强大的统计分析和可视化功能被广泛使用。然而,当涉及到大型企业级数据库时,如Oracle,如何高效地进行数据交换和处理成为了一个关键问题...

    linux rpm包telnet_server+安装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包和包体的创建和使用

    ORACLE 包和包体的创建和使用,深入浅出。

    python连接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包

    linux X86_64 安装oracle11G RAC所需全部的oracle包: 为了在vmware下安装配置oracle11G的RAC环境,我用的是redhat linux5,找这个包简直费思老劲了,终于弄齐了,特拿来与后来者分享! 只需这一个包就足够使用了,...

    plsql连接oracle的包

    安装plsql_oracle的联系包(不用自己下载,别人给了一个包, 我放在:D:\IT\plsql_oracle下) --tnasname.ora:在plsql_oracle这个包里面 2,配置oracle监听,即环境变量 右击我的电脑选”属性”->“高级”->“环境...

    Oracle内置包_reference

    Oracle内置包是Oracle数据库系统提供的一系列预定义的PL/SQL包,这些包极大地扩展了数据库的功能,并简化了开发者在数据库层面的操作。Oracle内置包包括了处理数据、管理事务、控制用户访问、监控数据库性能等多个...

    cx_Oracle离线安装包

    总结一下,cx_Oracle离线安装在Linux环境下,需要安装cx_Oracle的RPM包,并配置Oracle Instant Client,包括基本连接库和SDK。通过设置环境变量,确保Python能够正确地找到并使用这些组件。这个过程对于没有网络连接...

    oracle客户端windows包

    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的UTL_HTTP工具包发送包含POST参数的请求

    ### 通过ORACLE的UTL_HTTP工具包发送包含POST参数的请求 #### 概述 在Oracle环境中,经常需要与外部系统进行交互,特别是在需要从Web服务器获取数据或向其发送数据的情况下。`UTL_HTTP`是Oracle提供的一款强大工具...

    oracle帮助文档包.rar

    包含文件: Oracle SQL语法速查.chm Oracle函数手册.chm Oracle官方文档-Oracle错误代码.chm Oracle函数手册.chm oracle傻瓜1000问.chm Oracle性能优化-SQL编写的一般规则.chm

    Oracle 常见故障解决方法

    解决方法是检查一下系统是否安装了 bos.clvm 的包。 6. 解决裸设备权限问题 在安装 oracle rac 时 oracle 无法正常访问并行裸设备。解决方法是 export PGSD_SUBSYS=grpsvcs 在 oracle 用户下的.profile 里加入即可...

Global site tag (gtag.js) - Google Analytics