oracle系统包——DBMS_PIPE用法
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
2011-06-24 socket案例二
2011-06-24 socket案例一
2011-06-24 树TreePanel
2011-06-24 表格GridPanel
2011-06-24 表单Ext.form.FormPanel
2011-06-24 布局Layout