this is a extra element for clear the floated element
ORACLE存储过程管道通信的例子
  • 12/31
  • 2008
备份恢复 | Oracle 1325 次查看
  /*

  管道通信的例子程序

  注意: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;

  /

  
您可能感兴趣的:

更多相关内容