DBMS_PIPE包
DBMS_PIPE包用于同一个实例,不同会话(用户)之间进行通信。管道的信息被缓存在系统全局区SGA中,当关闭Oracle实例(Instance)时,就会丢失管道信息。
管道分为两类:
(1)公有管道:所有数据库用户都可以访问的管道,因此要想在同一个实例的不同用户之间建立管道,要使用公有管道。
(2)私有管道:只能由建立管道的数据库用户访问。
管道发送方:
(1)创建管道 create_pipe
语法:
DBMS_PIPE.create_pipe(pipename in varchar2, maxpipesize in integer default 8192, private in boolean default TRUE) return integer;
(2)写信息到本地缓存区 pack_message(打包)
语法:
DBMS_PIPE.pack_message(message in {varchar2, number, date});
(3)将本地缓存区中的消息 发送到 管道pipename 中 send_message
语法:
1 DBMS_PIPE.send_message(pipename in varchar2, 2 timeout in integer default MAXWAIT, 3 maxpipesize in integer default 8192) 4 return integer;
管道接收方:
(1)从管道接收消息,写入本地缓冲区中 receive_message
语法:
1 DBMS_PIPE.receive_message(pipename in varchar2, 2 timeout in integer default MAXWAIT) 3 return integer;
(2)读取缓冲区的数据 UNPACK_MESSAGE(拆包)
语法:
DBMS_PIPE.unpack_message(message out varchar2, number, date);
(3)删除管道 remove_pipe
语法:
1 DBMS_PIPE.remove_pipe(pipename in varchar2) 2 return integer;
1 --发送消息管道 2 create or replace procedure send_message_pipe(pipename varchar2, 3 message varchar2) is 4 --variable 5 flag integer; 6 7 begin 8 --创建管道 9 flag := DBMS_PIPE.create_pipe(pipename); 10 if flag = 0 then 11 DBMS_PIPE.pack_message(message); --将消息写到本地缓冲区(打包) 12 flag := DBMS_PIPE.send_message(pipename); --将本地缓冲区的消息发送到管道 13 end if; 14 end send_message_pipe;
--接收消息管道
1 create or replace procedure receive_message_pipe(pipename varchar2, 2 message out varchar2) 3 is 4 5 --variable 6 flag integer; 7 begin 8 --接收管道消息,到本地缓冲区中 9 flag := DBMS_PIPE.receive_message(pipename); 10 if flag = 0 then 11 DBMS_PIPE.unpack_message(message); --从缓冲区中读取消息(拆包) 12 flag := DBMS_PIPE.remove_pipe(pipename); --移除管道 13 end if; 14 end receive_message_pipe;
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· 不到万不得已,千万不要去外包
· C# WebAPI 插件热插拔(持续更新中)
· 会议真的有必要吗?我们产品开发9年了,但从来没开过会
· 如何打造一个高并发系统?
· 【译】我们最喜欢的2024年的 Visual Studio 新功能