当前位置:文档之家› 内置包Oracle

内置包Oracle

内置程序包
Oracle提供了许多内置程序包,它们用于扩展数据库的功能。

在开发应用程序时,可以利
用这些程序包。

数据库用户SYS拥有Oracle提供的所有程序包。

它们被定义为公有同义词,
并将执行权限授予了PUBLIC用户组,任何用户都可以访问它们。

Oracle提供的程序包的部分列表见表8.1。

续表
下面简单介绍几个常用的内置程序包。

8.2.1 DBMS_OUTPUT
DBMS—OUTPUT程序包允许显示PL/SQL块和子程序的输出结果,这样便于测试和调试它们。

PUT和PUT_LINE过程将信息输出到SGA中的缓冲区。

通过调用过程GET_LINE或通过 SET
SERVEROUTPUT ON,可以显示缓冲区中的信息。

默认缓冲区大小是2000字节。

最小值是2000,最大值是1,000,000。

DBMS一OUTPUT包
有以下常用过程。

ENABLE
ENABLE过程用来启用对PUT、PUT_ LINE和NEW_LINE等过程的调用,它只有一个输入参数,
即缓冲区大小(BUFFER_SIZE)。

缓冲区大小的输入值用于设置默认缓存的信息量。

调用
ENABLE将清除任何已废弃会话中缓存的数据。

DISABLE
DISABLE没有输入和输出。

DISABLE用于禁用对PUT、PUT_LINE和NEW_LINE的所有调用。

调用DISABLE过程还可清除缓冲区中的任何剩余信息。

PUT
PUT有一个输入参数,此参数被重载以接受VARCHAR2、NUMBER和DATE值。

PUT用于在缓冲
区中存储一条信息。

TO_CHAR将使用默认格式设置格式化这些项。

PUT_ LINE
PUT_ LINE有一个输入参数,此参数被重载以接受VARCHAR2、NUMBER和DATE值。

如果这些
值是要混合使用,则必须显式使用TO_CHAR函数。

PUT_LINE过程用于将一条信息存储在缓
冲区中,后接一个行结束标记。

NEW_LINE
NEW_LINE没有参数。

它用于向缓冲区中添加换行符。

换行符充当行结束标记。

对 PUT_LINE
或NEW_LINE的每次调用都将产生一行。

例13演示了DBMS_OUTPUT包的用法。

例13:
例13的输出结果如下所示。

8.2.2DBIVIS_LOB
DBMS_LOB程序包包含用于处理大型对象的过程和函数。

在Oracle中,LOB分为以下几种类
型:BLOB(二进制大对象)、CLOB(字符大对象)和BFILE(外部存储的二进制文件——
只读)。

大部分LOB操作由此程序包提供。

DBMS_ LOB包有如下的一些过程和函数。

APPEND:此过程用于将在src_lob参数中指定的BLOB或CLOB追加到在dest_lob参数中指定的BLOB或CLOB。

COPY:此过程用于从指定的偏移值开始将源BLOB或CLOB复制到目标CLOB或BLOB。

ERASE:此过程用于删除lob_loc指定的BLOB或CLOB中从指定偏移量(offset)处开始的指定量(amount)的部分。

GETLENGTH:此函数返回指定的BLOB、CLOB或BFILE的长度,并使用适合于该类型的单位。

INSTR:此函数从LOB数据中查找子串。

READ: 此过程从LOB数据中读取指定长度数据到缓冲区。

SUBSTR: 此函数从LOB数据中取子串。

WRITE: 此过程用于将指定数量的数据写入LOB。

以下是一些专门操作BFILE的过程和函数。

FILEOPEN: 此过程用于打开BFILE类型文件以进行读取。

FILEGETNAME: 此过程用于接受文件定位器值并返回文件目录别名和文件名。

FILECLOSE: 此过程用于关闭指定的BFILE。

FILEISOPEN: 此函数用于判断BFILE文件是否已打开。

DBMS_LOB程序的使用请参见第5章例4和例7。

8.2.3 DBMS_XMLQUERY
DBMS_XMLQUERY包用于将查询结果转换为XML格式。

例14演示了DBMS_XMLQUERY和DBMS_LOB包的用法。

例 14.
例14声明了一个CLOB数据类型的result变量,以及VARCHAR2类型的xmlstr和line两个变量。

其中,getXml函数用于将查询结果转换为XML格式,SUBSTR函数检索子字符串,32767值指定要从CLOB数据类型读取的最大字节数。

检索到的字符串存储在xmlstr变量中。

LOOP块循环执行,每次从xmlstr中读取一行。

INSTR函数返回一个字符串在另一个字符串中首次出现的位置。

在此,该函数返回换行符在字符串中的位置,直到遇到下一行。

8.2.4 DBMS RANDOM
DBMS_ RANDOM包可以用来生成随机数,该包的RANDOM函数返回一个8位的随机整数,该整
数的正负也是随机的。

例15所示代码产生10个l到100的随机整数。

例15:
8.2.5 UTL_FILE
UTL_FILE包用于从PL/SQL程序中读写操作系统文本文件,如XML文件。

UTL_FILE包对文
件的读写过程与编程语言(如C语言)的流操作类似,一般的过程是打开、读或写、关闭。

UTL_FILE包要求文件所在位置是基于Oracle的DIRECTORY对象指定的目录,不能直接使用
文件的绝对路径。

要使用UTL_ FILE包必须先将创建目录对象与操作系统的目录关联起来。

创建目录对象需要
有相关的权限,以SYSTEM用户执行如下命令。

例16首先创建了目录对象TEST_DIR关联到服务器上的C: DEVELOP文件夹,在使用此目录
对象之前必须保证操作系统中已存在此文件夹。

然后,将操作此目录对象的权限授予SCOTT
用户。

以SCOTT用户执行以下的命令。

例17通过UTL_FILE将DBMS_XMLQUERY包的查询结果保存到文件中。

例17:
例18演示了如何从XML文件中读取文本。

例18:
SQL> CREATE DIRECTORY TEST DIR AS 'C:\DEVELOP';
soL> GRANT READv WRITE ON DIRECTORY TEST DIR TO SCOTT;
上述代码的输出结果如下所示。

总结
触发器是当用户执行特定操作时自动执行的存储过程。

触发器由触发器语句、触发器限制和触发器操作3部分组成。

Oracle中的触发器分为行级触发器、语句级触发器、INSTEAD OF触发器、模式触发器和数据库级触发器5种类型。

INSTEAD OF触发器只能应用于视图。

内置程序包存储在数据库中,用于扩展数据库的功能。

DBMS_OUTPUT程序包允许用户从程序包、触发器和存储过程中输出信息。

DBMS_LOB程序包用于操作BLOB、CLOB和BFILE等数据类型。

相关主题