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;

 

posted @ 2018-03-20 20:14  C+++++++wyl  阅读(260)  评论(0编辑  收藏  举报