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;

 

转载于:https://www.cnblogs.com/ly01/p/8612161.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值