ORACLE存储过程管道通信的例子

王朝oracle·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

/*

管道通信的例子程序

注重:1要明文给于用户 EXECUTE ANY PROCEDURE 权力可能正常使用DBMS_PIPE

2设定:set serveroutput on

共有两个过程writepipe和readpipe

在sqlplus中通过@writepipe.sql的方式执行,可以创始过程writepipe和readpipe

通过 call writepipe('我的测试信息'); 写信息

用 call readpipe() 读信息

2002年4月12日

*/

CREATE OR REPLACE PROCEDURE writepipe(msg VARCHAR2) AS

n integer;

status NUMBER;

BEGIN

-- DBMS_PIPE.PACK_MESSAGE(LENGTH(msg));

DBMS_PIPE.PACK_MESSAGE(msg); --把信息放入缓冲区

status := DBMS_PIPE.SEND_MESSAGE('mypipe',1); --信息放入管道mypipe,系统等待时间为1秒

--假如status := DBMS_PIPE.SEND_MESSAGE('mypipe');那么就是等待1000天

IF status != 0 THEN

raise_application_error(-20099, 'Debug error');

END IF;

END;

/

CREATE OR REPLACE PROCEDURE readpipe AS

info varchar(30);

status integer;

begin

--接受等待时间为1秒,可以为0,立即调用或DBMS_PIPE.RECEIVE_MESSAGE('mypipe') 等待100天

status:= DBMS_PIPE.RECEIVE_MESSAGE('mypipe',1);

--status:= DBMS_PIPE.RECEIVE_MESSAGE('mypipe');

--status为0为成功可以UNPACK_MESSAGE,1为超时没有数据,2为信息太大,3为内部错误

IF status 0 THEN

DBMS_OUTPUT.PUT_LINE('没有信息返回,返回状态为:'status);

return;

-- RAISE_APPLICATION_ERROR(-20021,

-- 'execute_sql: Error while receiving.

-- Status = ' status);

END IF;

DBMS_PIPE.UNPACK_MESSAGE(info);

DBMS_OUTPUT.PUT_LINE('INFO=' INFO);

end;

/

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航