跳到主要内容
版本:1.0.14

兼容的Oracle系统包

DBMS_ALERT

DBMS_ALERT支持数据库事件(警报)的异步通知。通过适当使用此包和数据库触发器,应用程序可以在数据库中特殊的值发生更改时通知自己。

假设一个图形工具正在显示来自数据库表的一些数据的图形。 在读取和绘制数据之后,图形工具可以等待覆盖刚刚读取的数据的数据库警报。当数据被任何其他用户更改时,该工具会自动唤醒。 只需将触发器放在数据库表上,每当触发器被触发时,数据库表就会执行一个信号。

halo0root=# \df dbms_alert.*

dbms_alert.register

注册一个预警事件

语法:DBMS_ALERT.REGISTER (name IN VARCHAR(30) );

说明:neme 输入参数,预警事件名。

例如:

halo0root=# exec dbms_alert.register('aldd');

CALL

dbms_alert.remove

语法:DBMS_ALERT.REMOVE (name IN VARCHAR2);

说明:name要从列表中删除的预警事件名称(不区分大小写)。

例如:

halo0root=# exec dbms_alert.remove ('aldd');

CALL

dbms_alert.removeall

删除当前会话已注册所有预警事件

语法: DBMS_ALERT.REMOVEALL;

例如:

halo0root=# exec dbms_alert.removeall();

CALL

dbms_alert.signal

用于指定预警事件所对应的预警消息

语法:DBMS_ALERT.SIGNAL ( name IN VARCHAR2,

message IN VARCHAR2);

说明:

name预警事件的名称。

Message是与此警报相关联的消息,长度为1800字节或更少。此消息被传递给等待会话。通过使用消息中的信息,等待会话可以避免在警报发生后读取数据库。

例如:

halo0root=# exec dbms_alert.signal('aldd','zlq');

CALL

DBMS_ASSERT

DBMS_ASSERT包提供了一个接口来验证输入值的属性。

halo0root=# \df dbms_assert.*

dbms_assert.enquote_literal:用于字符串字面值添加了首引号和尾单引号。

语法:DBMS_ASSERT.ENQUOTE_LITERAL (str VARCHAR2)

RETURN VARCHAR2;

例如:

halo0root=# select DBMS_ASSERT.ENQUOTE_LITERAL (ename) from emp;

enquote_literal

-----------------

'ALLEN'

'WARD'

'JONES'

'MARTIN'

'BLAKE'

(5 行记录)

dbms_assert.enquote_namep

提供的字符串括在引号中。如果字符串已经在引号中,则不会添加额外的引号。然后检查用引号内的字符串,看它是否是一个有效的标识符。

语法:DBMS_ASSERT.ENQUOTE_NAME (

str VARCHAR2,

capitalize BOOLEAN DEFAULT TRUE)

RETURN VARCHAR2;

说明:capitalize如果为TRUE或默认值,不包含在引号中的str的字母字符将被转换为大写。

例如:

halo0root=# select DBMS_ASSERT.ENQUOTE_NAME (ename ) from emp;

enquote_name

--------------

"allen"

"ward"

"jones"

"martin"

"blake"

(5行记录)

dbms_assert.noop

返回值时不进行任何检查

语法:DBMS_ASSERT.NOOP (

str VARCHAR2 CHARACTER SET ANY_CS)

RETURN VARCHAR2 CHARACTER SET str%CHARSET;

DBMS_ASSERT.NOOP (

str CLOB CHARACTER SET ANY_CS)

RETURN CLOB CHARACTER SET str%CHARSET;

说明:str 输入值

例如:

halo0root=# select dbms_assert.noop ('666') from dual;

noop

------

666

(1 行记录)

dbms_assert.qualified_sql_name

验证输入的字符串是否为合格的SQL名称。

语法:DBMS_ASSERT.QUALIFIED_SQL_NAME (

str VARCHAR2 CHARACTER SET ANY_CS)

RETURN VARCHAR2 CHARACTER SET str%CHARSET;

说明:str 输入值

例如:

halo0root=# select dbms_assert.qualified_sql_name ('wy') from dual;

qualified_sql_name

--------------------

wy

(1 行记录)

dbms_assert.schema_name

验证输入字符串是否为一个现有的模式名。

语法:DBMS_ASSERT.SCHEMA_NAME (

str VARCHAR2 CHARACTER SET ANY_CS)

RETURN VARCHAR2 CHARACTER SET str%CHARSET;

说明:str输入值

例如:

halo0root=#select dbms_assert.schema_name('DBMS_OUTPUT') from dual;

schema_name

-------------

DBMS_OUTPUT

(1 行记录)

dbms_assert.simple_sql_name

验证输入字符串是否为一个简单的SQL名称。

语法:DBMS_ASSERT.SIMPLE_SQL_NAME (

str VARCHAR2 CHARACTER SET ANY_CS)

RETURN VARCHAR2 CHARACTER SET str%CHARSET;

例如:

halo0root=#select dbms_assert.simple_sql_name('emp') from dual;

simple_sql_name

-----------------

emp

(1 行记录)

DBMS_OUTPUT

DBMS_OUTPUT包能够从存储过程、包和触发器发送消息,对于显示 PL/SQL 调试信息特别有用

halo0root=# \df dbms_output.*

dbms_output.disable:禁用、调用、清除缓冲区的信息。

语法:DBMS_OUTPUT.DISABLE;

示例:

halo0root=# call DBMS_OUTPUT.DISABLE ( );

CALL

dbms_output.enable

对过程的调用

语法:DBMS_OUTPUT.ENABLE (

buffer_size IN INTEGER DEFAULT 20000);

说明:buffer_size上限(以字节为单位),缓冲信息量。

例如:

halo0root=# call DBMS_OUTPUT.ENABLE ( );

CALL

dbms_output.new_line

放置一个行尾标记

语法:DBMS_OUTPUT.NEW_LINE;

例如:

halo0root=# call DBMS_OUTPUT.NEW_LINE( );

CALL

dbms_output.put

对在缓冲区中放置一条部分行

语法: DBMS_OUTPUT.PUT (

item IN VARCHAR2);

说明:item要缓冲的项目

例如:

halo0root=# exec DBMS_OUTPUT.PUT ('hello');

CALL

dbms_output.put_line

在缓冲区中放置一条线

语法:DBMS_OUTPUT.PUT_LINE (

item IN VARCHAR2);

说明: item要缓冲的项目

例如:

halo0root=# exec DBMS_OUTPUT.PUT_LINE ('hello');

hello

CALL

DBMS_PIPE

包允许同一实例中的两个或多个会话进行通信,Oracle 管道在概念上与 UNIX 中使用的管道相似,但 Oracle 管道不是使用操作系统管道机制实现的;管道功能有几个潜在的应用程序:外部服务接口、独立事务、警报器(非事务性)、调试和集中器。

halo0root=# \df dbms_pipe.*

dbms_pipe.__list_pipes

获取所有命名管道的列表*

例如:

halo0root=# select dbms_pipe.__list_pipes ();

__list_pipes

-----------------

(abc,0,0,,f,)

(123,0,0,,f,)

(wjj,0,0,,f,)

(56789,0,0,,f,)

(asas,0,0,,f,)

(5 行记录)

dbms_pipe.__unpack_message_bytea

例如:

halo0root=# select dbms_pipe.__unpack_message_bytea ();

__unpack_message_bytea

------------------------

(1 行记录)

dbms_pipe._unpack_message_date

例如:

halo0root=# select dbms_pipe.__unpack_message_date ();

__unpack_message_date

-----------------------

(1 行记录)

dbms_pipe.__unpack_message_number

例如:

halo0root=# select dbms_pipe.__unpack_message_number ();

__unpack_message_number

-------------------------

(1 行记录)

dbms_pipe.__unpack_message_record

例如:

halo0root=# select dbms_pipe.__unpack_message_record ();

__unpack_message_record

-------------------------

(1 行记录)

dbms_pipe.__unpack_message_text

例如:

halo0root=# select dbms_pipe.__unpack_message_text ();

__unpack_message_text

-----------------------

(1 行记录)

dbms_pipe.__unpack_message_timestamp

语法:

例如:

halo0root=# select dbms_pipe.__unpack_message_timestamp ();

__unpack_message_timestamp

----------------------------

(1 行记录)

dbms_pipe.create_pipe

显式创建公共或专用管道

语法:DBMS_PIPE.CREATE_PIPE (

pipename IN VARCHAR2,

maxpipesize IN INTEGER DEFAULT 8192,

private IN BOOLEAN DEFAULT TRUE)

RETURN INTEGER;

说明:

pipename要创建的管道的名称,在调用和使用时必须使用此名称,且名称在整个实例中必须是唯一的

maxpipesize管道允许的最大大小,默认值为 8192 字节。

Private使用缺省值 ,创建专用管道,可以在调用时隐式创建公共管道。

例如:

halo0root=# select dbms_pipe.create_pipe ('asas');

create_pipe

-------------

(1 行记录)

dbms_pipe.next_item_type

确定本地消息缓冲区中下一项的数据类型

调用以将管道信息放置在本地缓冲区中后

RECEIVE_MESSAGENEXT_ITEM_TYPE.

语法:DBMS_PIPE.NEXT_ITEM_TYPE

RETURN INTEGER;

例如:

halo0root=# select DBMS_PIPE.NEXT_ITEM_TYPE ();

next_item_type

----------------

0

(1 行记录)

dbms_pipe.pack_message

在本地消息缓冲区中生成消息

要发送消息,先对函数进行一次或多次调用,然后调用以在命名管道上的本地缓冲区中发送消息

语法: DBMS_PIPE.PACK_MESSAGE (

item IN VARCHAR2);

DBMS_PIPE.PACK_MESSAGE (

item IN NCHAR);

DBMS_PIPE.PACK_MESSAGE (

item IN NUMBER);

DBMS_PIPE.PACK_MESSAGE (

item IN DATE);

DBMS_PIPE.PACK_MESSAGE_RAW (

item IN RAW);

DBMS_PIPE.PACK_MESSAGE_ROWID (

item IN ROWID);

说明:

item 要打包到本地消息缓冲区中的项。

例如:

halo0root=# call DBMS_PIPE.PACK_MESSAGE('abc');

CALL

dbms_pipe.purge

此过程清空命名管道的内容

根据最近最少使用的算法,隐式创建的空管道会从共享全局区域中老化。因此,调用允许您释放与隐式创建的管道关联的内存

语法:DBMS_PIPE.PURGE (

pipename IN VARCHAR2);

说明:pipename要从中删除所有邮件的管道的名称。

例如:

halo0root=# call dbms_pipe.purge ('abc');

CALL

dbms_pipe.receive_message

将消息复制到本地消息缓冲区

语法:DBMS_PIPE.RECEIVE_MESSAGE (

pipename IN VARCHAR2,

timeout IN INTEGER DEFAULT maxwait)

RETURN INTEGER;

说明:

pipename要在其上接收消息的管道的名称。

timeout等待消息的时间(以秒为单位)。

默认值为常量 ,定义为 86400000(1000 天)。超时 0 可让您在不阻塞的情况下进行读取。

例如:

halo0root=#select dbms_pipe.receive_message('abc','10');

receive_message

-----------------

1

(1 行记录)

dbms_pipe.remove_pipe

删除显式创建的管道

隐式创建的管道在为空时会自动删除。但是,只有通过调用 或关闭实例来显式创建的管道。在删除管道之前,将删除管道中所有未使用的记录。

语法:DBMS_PIPE.REMOVE_PIPE (

pipename IN VARCHAR2)

RETURN INTEGER;

例如:

halo0root=# select dbms_pipe.remove_pipe ('123');

remove_pipe

-------------

(1 行记录)

dbms_pipe.reset_buffer

此过程将定位指示器重置为 0

由于所有管道共享一个缓冲区,因此您可能会发现在使用新管道之前重置缓冲区很有用。这可确保首次尝试向管道发送消息时,不会无意中发送缓冲区中剩余的过期消息。

语法:DBMS_PIPE.RESET_BUFFER;

例如:

halo0root=# exec dbms_pipe.reset_buffer ();

CALL

dbms_pipe.send_message

在命名管道上发送消息

该消息包含在本地消息缓冲区中,该缓冲区中充满了对管道的调用。可以使用 显式创建管道,否则,将隐式创建管道。

语法:DBMS_PIPE.SEND_MESSAGE (

pipename IN VARCHAR2,

timeout IN INTEGER DEFAULT MAXWAIT,

maxpipesize IN INTEGER DEFAULT 8192)

RETURN INTEGER;

说明:

pipename放置消息的管道的名称。

如果使用的是显式管道,则这是您在调用时指定的名称

timeout尝试将消息放在管道上时等待的时间(以秒为单位)。

默认值为常量 ,定义为 86400000(1000 天)。

maxpipesize管道允许的最大大小(以字节为单位),默认值为 8192 字节。

例如:

haloOroot=#select dbms_pipe.send_message('123','10','800');

send_message

--------------

0

(1 行记录)

dbms_pipe.unique_session_name

用于接收的名称在当前连接到数据库中所有会话唯一的

从同一会话对此函数的多次调用始终返回相同的值。您可能会发现使用此函数为您的调用提供参数非常有用

语法:DBMS_PIPE.UNIQUE_SESSION_NAME

RETURN VARCHAR2;

例如:

halo0root=# select dbms_pipe.unique_session_name();

unique_session_name

---------------------

PG$PIPE$7$176085

(1 行记录)

dbms_pipe.unpack_message

从缓冲区中检索项,调用以将管道信息放在本地缓冲区中后

语法:DBMS_PIPE.UNPACK_MESSAGE (

item OUT VARCHAR2);

DBMS_PIPE.UNPACK_MESSAGE (

item OUT NCHAR);

DBMS_PIPE.UNPACK_MESSAGE (

item OUT NUMBER);

DBMS_PIPE.UNPACK_MESSAGE (

item OUT DATE);

DBMS_PIPE.UNPACK_MESSAGE_RAW (

item OUT RAW);

DBMS_PIPE.UNPACK_MESSAGE_ROWID (

item OUT ROWID);

说明:

item:用于从本地消息缓冲区接收下一个解压缩项的参数。

例如:

halo0root=# call dbms_pipe.unpack_message('raw');

item

------

(1 行记录)

DBMS_RANDOM

包提供了一个内置的随机数生成器,不适用于加密

dbms_random.__value

例如:

halo0root=# select dbms_random.__value( );

__value

--------------------

0.4003495955839753

(1 行记录)

dbms_random.initialize

初始化生成器

语法:DBMS_RANDOM.INITIALIZE (

val IN BINARY_INTEGER);

说明:val用于生成随机数的种子号

例如:

halo0root=# call dbms_random.initialize('10');

CALL

dbms_random.random

将生成一个随机数

语法:DBMS_RANDOM.RANDOM

RETURN binary_integer;

说明:binary_integer返回大于或等于 -power(2,31) 且小于 power(2,31) 的随机整数

例如:

halo0root=# select dbms_random.random ();

random

-------------

-1364538998

(1 行记录)

dbms_random.seed

将重置种子

语法:DBMS_RANDOM.SEED (

val IN BINARY_INTEGER);

DBMS_RANDOM.SEED (

val IN VARCHAR2);

说明:val用于生成随机数的种子号或字符串

例如:

halo0root=# call dbms_random.seed ('123');

CALL

dbms_random.string

获取一个随机字符串

语法:DBMS_RANDOM.STRING

opt IN CHAR,

len IN NUMBER)

RETURN VARCHAR2;

说明:

opt指定返回字符串的外观:

'u', 'U' - 以大写字母字符返回字符串

'l', 'L' - 以小写字母字符返回字符串

'a', 'A' - 以混合大小写字母字符返回字符串

"x"、"X" - 以大写字母数字字符返回字符串

'p', 'P' - 返回任何可打印字符的字符串。

否则,返回字符串为大写字母字符。

Len返回字符串长度

例如:

halo0root=# select dbms_random.string ('p','200');

string

-------------------------------------------------------------------------------


bX_%,_NrnapHbS?"<4?=dl' JpG4lT)D^th`Fato%v3>y2Lw6JsltTl1Cw6]JR4'L''WE&"t?VetB`

KQk2sO3t"0mUA@5+Xnp$`0P 1XrNX#N{qd|v F+:C6^R(+a,4@ 5QO4W)o(/}$uZH<fG|VTE if*J*

Z71BI{?jhiVH<n1K[?q5{6{;5NTWAoRWfY*`c&j}S

(1 行记录)

dbms_random.terminate

完成包后,调用该过程,终止程序

语法:DBMS_RANDOM.TERMINATE;

例如:

halo0root=# call DBMS_RANDOM.TERMINATE ( );

CALL

dbms_random.value

得到一个随机数,大于或等于 0 且小于 1,小数点右侧有 38 位数字(38 位精度)

语法:DBMS_RANDOM.VALUE

RETURN NUMBER;

DBMS_RANDOM.VALUE(

low IN NUMBER,

high IN NUMBER)

RETURN NUMBER;

说明:

low从中生成随机数的范围内的最低数字。生成的数字可能等于low

high低于该值可生成随机数的最高数字。生成的数字将小于high

例如:

halo0root=# select DBMS_RANDOM.VALUE( );

value

-------------------

0.177380431909114

(1 行记录)

DBMS_UTILITY

包提供了各种实用程序子程序。

dbms_utility.format_call_stack:格式化当前调用堆栈。这可以用于任何存储过程或触发器,以访问调用堆栈。

语法:DBMS_UTILITY.FORMAT_CALL_STACK

RETURN VARCHAR2;

例如:

halo0root=# select DBMS_UTILITY.FORMAT_CALL_STACK ( );

format_call_stack

----------------------------

----- SPL Call Stack -----+

object line object +

handle number name +

(1 行记录)

dbms_utility.get_time:

确定当前时间(以百分之一秒为单位)。此子程序主要用于确定经过的时间。子程序被调用两次 - 在某个过程的开始和结束时 - 然后从第二个(后来的)数字中减去第一个(较早)数字以确定经过的时间

语法:DBMS_UTILITY.GET_TIME

RETURN NUMBER;

例如:

halo0root=# select dbms_utility.get_time ( );

get_time

----------

-157669

(1 行记录)

UTL_FILE

包使用该软件包,PL / SQL程序可以读取和写入操作系统文本文件。 提供受限版本的操作系统流文件 I/O

文件位置和文件名参数作为单独的字符串提供给函数,以便可以根据可访问目录对象视图指定的可访问目录列表检查文件位置。文件位置和名称必须共同表示系统上的合法文件名,并且目录必须是可访问的。可访问目录的子目录不一定也可访问;它也必须使用与对象匹配的完整路径名来指定。

halo0root=# \df utl_file.*

utl_file.fclose_all:将关闭会话的所有打开的文件句柄。这应用作紧急清理过程,例如,当 PL/SQL 程序在异常时退出时。

语法:UTL_FILE.FCLOSE_ALL;

例如:

halo0root=# call utl_file.fclose_all( );

CALL

utl_file.fcopy:

将文件的连续部分复制到新创建的文件。

默认情况下,如果省略 了 and 参数,则会复制整个文件。源文件以读取模式打开。目标文件以写入模式打开。可以选择指定起始行号和结束行号,以便从源文件的中心选取一个部分进行复制。

语法:UTL_FILE.FCOPY (

src_location IN VARCHAR2,

src_filename IN VARCHAR2,

dest_location IN VARCHAR2,

dest_filename IN VARCHAR2,

start_line IN BINARY_INTEGER DEFAULT 1,

end_line IN BINARY_INTEGER DEFAULT NULL);

说明:src_location源文件的目录位置,从视图中(区分大小写)DIRECTORY_NAMEALL_DIRECTORIES

src_filename要复制的源文件

dest_location创建目标文件的目标目录

dest_filename从源文件创建的目标文件

start_line开始复制的行号。默认值为第一行1

end_line停止复制的行号。默认值表示文件的结尾NULL,

例如:

call utl_file.fcopy('/home/halo','hh','/home/halo','xx.txt');

CALL

utl_file.fopen

打开一个文件,可以指定最大行大小,最多可以同时打开50个文件

语法:UTL_FILE.FOPEN (

location IN VARCHAR2,

filename IN VARCHAR2,

open_mode IN VARCHAR2,

max_linesize IN BINARY_INTEGER DEFAULT 1024)

RETURN FILE_TYPE;

说明:

location文件的目录位置。此字符串是目录对象名称,必须以大写形式指定。必须对此目录对象授予读取权限,用户才能运行 。UTL_FILEFOPEN

filename文件名,包括扩展名(文件类型),不带目录路径。如果目录路径作为文件名的一部分提供,则 将被 忽略。在 Unix 上,文件名不能以 / 结尾。FOPEN

open_mode指定如何打开文件。模式包括:

r-- 阅读文本

w-- 写文字

a-- 附加文本

rb-- 读取字节模式

wb-- 写入字节模式

ab-- 追加字节模式

如果尝试打开指定""或""的文件,但该文件不存在,则会在模式下创建该文件。aabopen_modewrite

max_linesize此文件的每行(包括换行符)的最 大字节数(最小值 1,最大值 32767)。如果未指定,Oracle 将提供默认值 1024。

例如:

halo0root=#select UTL_FILE.FOPEN

('/home/halo','abc.txt','w','100') from dual ;

fopen

-------

1

(1 行记录)

utl_file.fremove

将删除磁盘文件,前提需要足够的权限

语法: UTL_FILE.FREMOVE ( location IN VARCHAR2, filename IN VARCHAR2);

说明:

location文件的目录位置,发件人(区分大小写)DIRECTORY_NAMEALL_DIRECTORIES

filename要删除的文件的名称

例如:

halo0root=# call utl_file.fremove('/home/halo','abc.txt');

CALL

utl_file.frename

将现有文件重命名为新名称

语法:UTL_FILE.FRENAME ( src_location IN VARCHAR2, src_filename IN VARCHAR2, dest_location IN VARCHAR2, dest_filename IN VARCHAR2, OVERWOVER IN BOOLEAN DEFAULT FALSE);

说明:src_location源文件的目录位置,从视图中(区分大小写)DIRECTORY_NAMEALL_DIRECTORIES

src_filename要重命名的源文件

dest_location目标文件的目标目录,从视图中(区分大小写)DIRECTORY_NAMEALL_DIRECTORIES

dest_filename文件的新名称

overwrite默认值为 。必须同时授予对源目录和目标目录的权限。可以使用该参数指定是否覆盖目标目录中存在文件。

例如:

halo0root=#call UTL_FILE.FRENAME('/home/halo','G.txt','/home/halo','hh');

CALL

utl_file.is_open

测试文件句柄以查看它是否标识打开的文件

语法:UTL_FILE.IS_OPEN ( file IN FILE_TYPE) RETURN BOOLEAN;

说明:file调用返回的活动文件句柄

例如:

halo0root=# select utl_file.is_open ('123') from dual;

is_open

---------

f

(1 行记录)