oracle系统包——DBMS_PIPE用法
2024-08-26 10:21:29
DBMS_PIPE包用于在同一例程(实例)的不同会话之间进行通信;注意,如果用户要执行包dbms_pipe中的过程和函数,则必须要为用户授权。
sql>conn sys/oracle as sysdba;
sql>grant execute on dbms_pipe to scott;
一、管道:
1)、公有管道:所有数据库用户可访问。
2)、私有管道:只能建立管道的数据库用户可访问。
二、DBMS_PIPE包的过程和函数解析
CREATE_PIPE:用于建立公用管道或私有管道。如果将参数private设置为TRUE,则建立私有管道;如果设置为FALSE,则建立公用管道。
eg:
declare
falg int;
begin
flag:=dbms_pipe.create_pipe('public_pipe',8192,false);
if flag=0 then
dbms_output.put_line('建立公用管道成功');
end if;
end;
/
PACK_MESSAGE:用于将消息写入到本地消息缓冲区
SEND_MESSAGE:用于将本地消息缓冲区中的内容发送到管道
RECEIVE_MESSAGE:用于接收管道消息
NEXT_ITEM_TYPE:用于确定本地消息缓冲区下一项的数据类型。
如果该函数返回0,则表示管道没有任何消息;
如果返回6,则表示下一项的数据类型为number;
如果返回9,则表示下一项的数据类型为varchar2;
如果返回11,则表示下一项的数据类型为rowid;
如果返回12,则表示下一项的数据类型为date;
如果返回23,则表示下一项的数据类型为raw.
UNPACK_MESSAGE:用于将消息缓冲区的内容写入到变量中.
REMOVE_PIPE:用于删除已经建立的管道
PUGER:用于清除管道中的内容
RESET_BUFFER:用于复位管道缓冲区
UNIQUE_SESSION_NAME:用于为特定会话返回惟一的名称,并且名称的最长度为30字节.
案例:
1、创建一个发消息的过程:
CREATE OR REPLACE PROCEDURE SEND_MESSAGE(PIPENAME VARCHAR2,
MESSAGE VARCHAR2) IS
FLAG NUMBER;
BEGIN
FLAG := DBMS_PIPE.CREATE_PIPE(PIPENAME);
IF FLAG = 0 THEN
DBMS_PIPE.PACK_MESSAGE(MESSAGE);
FLAG := DBMS_PIPE.SEND_MESSAGE(PIPENAME);
END IF;
END;
/
2、创建一个接收消息的包
CREATE OR REPLACE PROCEDURE RECEIVE_MESSAGE(PIPENAME VARCHAR2,
MESSAGE OUT VARCHAR2) IS
FLAG NUMBER;
BEGIN
FLAG := DBMS_PIPE.RECEIVE_MESSAGE(PIPENAME);
IF FLAG = 0 THEN
DBMS_PIPE.UNPACK_MESSAGE(MESSAGE);
FLAG := DBMS_PIPE.REMOVE_PIPE(PIPENAME);
END IF;
END;
/
3、运行包
--在一个会话中执行:
exec send_message('pipe','I send message');
--在另一会话中执行:
var message varchar2(200);
exec receive_message('pipe',:message);
print message;
执行结果如下:
PL/SQL procedure successfully completed
message
———
I send message
最新文章
- java中this 关键字的使用
- chVsprintf
- 【9-20】vimtutor学习笔记
- NPOI基本操作XLS
- 自定义progressBar的旋转圆圈
- 解决Intellij IDEA 通过archetype创建Maven项目缓慢的问题
- gulp自己主动化任务脚本在HybridApp开发中的使用
- C技巧:结构体参数转成不定参数
- eclipse 汉化
- 单调队列-hdu-3415-Max Sum of Max-K-sub-sequence
- Eclipse用link方式安装插件
- JSP中的Attribute和InitParameter
- graph isomorphism 开源算法库VFlib, Nauty
- linux ubuntu平台下安装Scrapy
- java IO之 序列流 集合对象Properties 打印流 流对象
- HTML阻止iframe跳转页面并使用iframe在页面内嵌微信网页版
- FZU 2285 迷宫寻宝
- springboot热部署配置
- POSIX
- 简单的词法设计——DFA模拟程序
热门文章
- thinkjs 框架图
- Android-读取操作系统通话记录并/拨打电话/发送短信/复制号码到拨号盘
- Android 工具类大全
- TSQL--SORT MERGE JOIN
- 把windows电脑变成路由器使用
- .net core i上 K8S(六).netcore程序的service网络代理模式
- ie8在win7系统下怎么安装或重装?[转载]
- TOMCAT在POST方法提交参数丢失问题
- BZOJ.5407.girls/CF985G. Team Players(三元环计数+容斥)
- ArchLinux 下 virtualbox 报错 libQtCore.so.4: cannot open shared object file