PURGE

此过程用于清空指定的管道的内容。

声明

procedure purge(pipename in varchar2);

结构

参数 说明
pipename 管道的名称

示例

drop procedure send_message4 cascade;
drop procedure receive_message4 cascade;
drop procedure remove_message cascade;

exec DBMS_PIPE.reset_buffer();                    --清空缓冲区,会把未发送的本地缓冲区中的消息清空 

create or replace procedure remove_message(pipename varchar2)
is
     flag int;
begin
     flag := DBMS_PIPE.REMOVE_PIPE('mypublicpipe');
end;
/

create or replace procedure send_message4() is 
declare
     v_statpipe2 int;
     v_pubchar varchar2(100):='This is a text string';
     v_pubdate date := to_date('2017-05-05');
     v_pubnum  number :=109;
begin
     v_statpipe2 := dbms_pipe.create_pipe('mypublicpipe',8192,FALSE);
     dbms_pipe.pack_message(v_pubchar);
     dbms_pipe.pack_message(v_pubdate);
     dbms_pipe.pack_message(v_pubnum);

     v_statpipe2 := dbms_pipe.send_message('mypublicpipe',10,8192);
end;
/

create or replace procedure receive_message4() is
declare
     v_statpipe2 int;
     v_holdtype int;
     v_holdchar varchar2(100);
     v_holddate date;
     v_holdnum number;
begin
     v_statpipe2 := dbms_pipe.receive_message('mypublicpipe',10);
loop
     v_holdtype := dbms_pipe.next_item_type;
     if v_holdtype=0 then exit;
     elsif v_holdtype=6 then dbms_pipe.unpack_message(v_holdnum);
     elsif v_holdtype=9 then dbms_pipe.unpack_message(v_holdchar);
     elsif v_holdtype=12 then dbms_pipe.unpack_message(v_holddate);
     end if;
end loop;

     dbms_output.put_line(v_holddate);
     dbms_output.put_line(v_holdnum);
     dbms_output.put_line(v_holdchar);
end;

/

exec send_message4();

[2]exec receive_message4();
2017-05-05
109
This is a text string


exec send_message4();

exec DBMS_PIPE.PURGE('mypublicpipe');       --清空管道中的内容

[2]exec receive_message4();   --管道被清空接收不到消息


exec remove_message('mypublicpipe');       --删除管道

drop procedure remove_message cascade;
drop procedure send_message4 cascade;
drop procedure receive_message4 cascade;