`

Oracle中的包(package)

阅读更多
包 (package)
  (1)包的意义

  PL/SQL为了满足程序模块化的需要,除了块(block)和子程序结构外,还引入了包的构造。

  包是一种数据库对象,将逻辑上相关的PL/SQL类型、对象和子程序组合成一个更大的单位。包有两个部分:包说明(specification)和包体(body)。说明部分是为应用程序的接口,它申明类型、常量、例外、游标和可用的子程序。体定义游标和子程序,实现说明。应用程序仅对包说明中的申明是可见的和可存取。如果ORACLE具有Procedure选件,包可以编译、存贮在ORACLE数据库中,其内容可为许多应用共享。当用户第一次调用一包装的子程序时,整个包装入到内存,所以在以后对包中子程序调用时,不再需要I/O操作,故包可提高效率和改进性能。

  PL/SQL的包具有信息隐蔽性(information hiding),仅在算法和数据结构设计有关层可见。在前面讲到的过程中,可将过程说明和过程体组成一个程序单位。也可将过程说明与它的过程体分开,在这种情况下,将过程放置在一个包中,可隐蔽实现的细节。也可在包中定义过程,而该过程在包说明中没有定义过程说明,这样定义的过程仅在包内使用。

  (2)包的定义

  包的定义形式如下:

  包说明:

  PACKAGE 包名 IS

  --变量说明;

  --游标说明;

  --例外说明;

  --记录说明;

  --Plsql表说明;

  --过程说明;

  --函数说明;

  END[包名];

  包体:

  PACKAGE BODY 包名 IS

  --变量名说明;

  --游标说明;

  --游标申明;

  --例外说明;

  --记录说明;

  --plsql说明;

  --过程体;

  --函数体;

  BEGIN

  --语句序列

  END[包名];

  其中,包名为命名包的标识符。

  包不能嵌入在PL/SQL块或子程序中,然而使用支持PL/SQL的任何工具可定义包。要使包为全体使用,必须用CREATE命令建立,存贮在一个ORACLE数据库中。可在SQL*PLUS、SQL*DBA或从ORACLE预编译宿主程序中利用CREATE PACKAGE和CREATE PACKAGE BODY 语句建立。

  例 2.52: 建立包:

  .包说明建立

  CREATE PACKAGE emp_actions AS

  TYPE EMPRECTYP IS RECORD(emp_id INTEGER,salary REAL);

  CURSOR desc_salary(emp_id NUMBER)RETURN EMPRECTYP;

  PROCEDURE hire_employee

  (ename CHAR,

  job CHAR,

  sal NUMBER,

  mgr NUMBER,

  comm NUMBER,

  deptno NUMBER;

  PROCEDURE fire_employee(emp_id NUMBER);

  END emp_actions;

  (A):其中语句TYPE EMPRECTYP IS RECORD(emp_id. INTEGER,Salary REAL)是指用户定义EMPRECTYP为RECORD(记录)类型对象。用户定义记录

  的一般格式是:

  TYPY 类型名 IS RECORD

  (字段名1{字段类型|变量名%TYPE|表名.列名%TYPE|表名%ROWTYPE}[NOT NULL],

  字段名2{字段类型|变量名%TYPE|表名.列名%TYPE|表名%ROWTYPE}[NOT NULL],...);其中:类型名为类型说明符,可在记录说明中使用。字段

  类型为PL/SQL允许的任何数据类型,包括RECORD类型和TABLE(表)类型。可用%TYPE或%ROWTYPE属性指定一字段的数据类型。

  利用%TYPE属性可提供变量,常量或数据库列的数据类型。例如变量my_dname是同SCOTT的DEPT表的DNAME列类型相同,则可如下定义:

  my_dname SCOTT.dept.danme%TYPE ,%ROWTYPE属性提供一记录类型,它表示一表(或视图)中的一行。记录可存贮由表所选择的一整行或者由

  一游标所获取的一整行。例如:

  DECLARE

  emp_rec emp% ROWTYPE;

  CURSOR C1 IS SELECT deptno,dname,loc FROM dept;

  dept_rec C1%ROWTYPE;

  其中 emp_rec记录可存贮从表EMP中选择的行,dept_rec记录可存贮由C1游标所获取的行。这样定义的记录中的字段与行中列有相同的名和相同数据类型。记录中的字段可以下列形式引用:

  记录名.字段名

  emp_rec.ename:=’JOHNSON’;
分享到:
评论

相关推荐

    Oracle中的package对象

    Package中的全局变量是其重要组成部分,它们在同一个会话(session)内具有持久性。这意味着在会话期间,这些变量的值可以被多次调用的过程或函数共享和修改,但不会影响到其他会话中的变量状态。这类似于面向对象编程...

    ORACLE 内置package解密工具(unwrap )

    oracle db内部的package全部是加密的,需要解密使用oracle wrap加密过的程序包,而unwrap解密工具可以拿到明文的package源代码。 解密的理论依据都来源于 "The oracle hacker's handbook" by David Litchfield 这...

    oracle汉字转拼音package包-支持UTF8

    总的来说,这个"oracle汉字转拼音package包-支持UTF8"是一个非常实用的工具,可以帮助我们在Oracle数据库环境中有效地处理汉字到拼音的转换问题,尤其适用于处理UTF8编码的多语言数据。正确理解和使用这个Package,...

    oracle jdbc diver package 正版

    Oracle JDBC Driver Package,简称为Oracle JDBC驱动包,是Oracle公司为Java开发者提供的用于与Oracle数据库进行交互的重要组件。这个正版的驱动包确保了开发者能够安全、高效地通过Java应用程序访问和操作Oracle...

    C#中调用ORACLE的PACKAGE里方法和存储过程的应用

    在C#部分代码中,我们首先需要建立一个到ORACLE数据库的连接,然后使用OracleCommand对象调用PACKAGE中的方法和存储过程。在调用f_get函数时,我们需要将输入参数str传递给函数,并将返回值存储在result参数中。在...

    oracle汉字转拼音package_(UTF8)

    这个"oracle汉字转拼音package_(UTF8)"是一个专门为UTF8字符集设计的Oracle PL/SQL包,用于解决这类问题。UTF8是国际上广泛使用的多语言编码标准,能有效地支持各种语言,包括中文。 在Oracle中,PL/SQL是一种...

    Oracle package

    1. **Package 规范 (Package Specification)**:定义了Package中的公共接口,包括所有对外可见的数据类型、变量、常量、游标和子程序等。这部分通常被称作Package的头部或签名。 2. **Package 实现 (Package Body)**...

    怎么用oracle打包

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

    Oracle数据库Package

    在上传的文件中,"包调用.sql"很可能是包含对Package中过程或函数的调用语句,例如: ```sql BEGIN 包名.过程名(参数); DBMS_OUTPUT.PUT_LINE(包名.函数名(参数)); END; / ``` "包 体.txt"和"包.txt"分别可能包含...

    oracle_11g_package.zip

    在安装"oracle_11g_package.zip"中的RPM包时,需要注意以下几点: 1. 确保操作系统版本与Oracle 11g RAC兼容,通常需要是Red Hat Enterprise Linux或CentOS等企业级Linux发行版。 2. 在安装前,执行`rpm -qa`命令...

    Oracle离线安装的环境包

    本环境包提供了Oracle离线安装所需的所有组件,以`.rpm`(Red Hat Package Manager)格式封装,适用于基于RPM的Linux发行版,如CentOS、RHEL等。 首先,让我们深入理解离线安装Oracle数据库的过程: 1. **下载离线...

    centos7-oracle-package.zip

    centos7 安装oracle所需其他包,在安装oracle的过程中,有些包用yum的方式下载不了,故zip打包的是oracle所属的安装包,文件是rpm格式文件,这是centos7安装oracle所需离线包

    Oracle DB+ASM package for RedHat 6.5

    Oracle数据库是全球最广泛使用的商业关系型数据库管理系统之一,尤其在企业级应用中占据主导地位。在Red Hat Enterprise Linux 6.5 (RHEL 6.5)上部署Oracle Database 12c并结合ASM(Automatic Storage Management)...

    大型项目Oracle sql,function,procedures,package,cursor,job

    4. **Package**:Oracle包是一种组织PL/SQL对象(如函数、过程、类型等)的方式,它可以提高代码的复用性和管理性。一个包可以包含公有和私有元素,公有元素可以在包外部访问,私有元素只能在包内部使用。在大型项目...

    oracle 中文转拼音工具包

    `sql/oracle汉字转拼音package.sql`是一个SQL脚本,它创建了一个Oracle数据库中的存储过程或者包(package),用于实现中文到拼音的转换功能。在Oracle数据库中,存储过程是一组为了完成特定功能的SQL语句集,可以被...

    Oracle Instant Client Package For Linux(x64) - Version 11.2.0.4.0

    免费,轻量的Oracle数据库工具,库和SDK,用于构建应用程序并将其连接到Oracle数据库实例。 此为集合包,版本均为11.2.0.4.0,适用于64位的Linux系统,包含zip及rpm两种格式: Basic Basic Light JDBC Supplement ...

    oracle11g所有rpm包大全

    RPM(Red Hat Package Manager)是Linux系统中用于软件包管理的一种格式,尤其在基于Red Hat的发行版如CentOS、Fedora等中常见。在Oracle 11g的部署中,RPM包被用来简化安装和配置过程,确保所有依赖关系得以解决。 ...

    linux下安装oracle缺少的所有包

    以下将详细介绍在Linux系统中安装Oracle时可能缺少的关键包和步骤。 1. **基础系统包**: - `glibc`: Oracle数据库需要GNU C Library(glibc)来支持其运行。确保系统中的glibc是最新的。 - `gcc`: 用于编译...

    oracle包的应用详解

    Oracle包在数据库编程中扮演着重要的角色,它是一种高级的PL/SQL组织形式,用于实现模块化和信息隐藏,从而提升代码的复用性和效率。本文将深入解析Oracle包的概念、作用及其定义。 首先,Oracle包是PL/SQL提供的一...

Global site tag (gtag.js) - Google Analytics