oracle的内置程序包由哪个用户所有

oracle的内置程序包由哪个用户所有,第1张

oracle的内置程序包是面向所有oracle用户开放的。

Oracle 一些内置的程序包

STANDARD和DBMS_STANDARD 定义和扩展PL/SQL语言环境

DBMS_LOG 提供对 Oracle LOB

数据类型进行 *** 作的功能

DBMS_LOCK 用户定义的锁

DBMS_OUTPUT 处理

PL/SQL 块和子程序输出调试信息

DBMS_SESSION 提供ALTER SESSION 命令的PL/SQL等效功能

DBMS_ROWID 获得ROWID 的详细信息

DBMS_RANDOM 提供随机生成器

DBMS_SQL 允许用户使用动态sQL,构造和执行任意DML和DDL语句

DBMS_JOB 提交和管理在数据库中执行的定时任务

DBMS_XMLDOM 用DOM模型读写XML类型的数据

DBMS_XMLPARSER XML解析,处理XML文档内容和结构

DBMS_XMLGEN 将SQL 查询结果转换为规范的XML格式

DBMS_XMLQUERY 提供将数据转换为XML类型的功能 DBMS_XSLPROCESSOR 提供XSLT功能. 转换XML文档

UTL_FILE 用PL/SQL程序来读写 *** 作系统文本文件

在一个大型项目中,有很多模块,每个模块都可能有很多的过程和函数,这些过程和函数默认就是放在一起,不方便查询和维护,甚至会发生误删除的事件。

所以通过使用包,就可以分类管理过程和函数。

使用包还有一个好处,就是可以在包中定义自定义类型,从而在过程和函数可以直接用于定义变量。

包的概念与java程序中包的概念是非常类似的,java程序中包也是为了分类管理不同的类,关键字都是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’

子程序或游标 'P_P_BONUS' 已在程序包说明中声明, 必须在程序包体中对其进行定义。意思是你已经声明了这个存储过程P_P_BONUS,但是没有在包体(PACKAGE BODY )中定义,就是你还需要在包体中定义P_P_Bonus的实现部分


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11215749.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存