兼容的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