RECEIVEPIPE¶
说明¶
此函数用于将管道中接收消息放到本地接收缓冲区中
返回值¶
接收消息成功返回0,超时等待退出会返回1,失败会报错。
注解
接收管道消息时,管道名称和超时等待时间参数传入NULL会报错。
除创建者和管理员其他用户没有接收私有管道消息的权限。
RECEIVEPIPE函数提供对DBMS.RECEIVE_MESSAGE方法的实现,该方法的详细说明请参照 RECEIVE_MESSAGE 章节。
示例¶
-- 清理环境
drop procedure mysendpipe cascade;
drop procedure myreceivepipe cascade;
select removepipe('mypipe');
REMOVEPIPE(int) |
---------------------
0 |
总数目:1
-- 发送消息程序,此程序需要调用dbms_pipe.pack_message方法构建消息。
create procedure mysendpipe() is
declare
statpipe int;
mytext varchar2(100):='This is a text string';
mydate date := to_date('2017-05-05');
mynum number := 109;
begin
statpipe := createpipe('mypipe',8192,FALSE);
dbms_pipe.pack_message(mytext);
dbms_pipe.pack_message(mydate);
dbms_pipe.pack_message(mynum);
statpipe := sendpipe('mypipe',10,8192);
if statpipe = 0 then
dbms_output.put_line('send message success');
else
dbms_output.put_line('send message fail');
end if;
end;
/
-- 接收消息程序,此程序需要调用dbms_pipe.unpack_message方法取出消息,并调用dbms_pipe.next_item_type确定下一条消息内容。
create or replace procedure myreceivepipe() is
declare
statpipe int;
flag int;
mytext varchar2(100);
mydate date;
mynum number;
begin
statpipe := receivepipe('mypipe',10);
loop
flag := dbms_pipe.next_item_type;
if flag = 0 then
exit;
elsif flag = 6 then
dbms_pipe.unpack_message(mynum);
elsif flag = 9 then
dbms_pipe.unpack_message(mytext);
elsif flag = 12 then
dbms_pipe.unpack_message(mydate);
end if;
end loop;
dbms_output.put_line(mydate);
dbms_output.put_line(mynum);
dbms_output.put_line(mytext);
end;
/
exec mysendpipe();
exec myreceivepipe();
select removepipe('mypipe');
REMOVEPIPE(int) |
---------------------
0 |
总数目:1
drop procedure mysendpipe;
drop procedure myreceivepipe;