DBMS_PIPE包用于在同一例程(实例)的不同会话之间进行通信;注意,如果用户要执行包dbms_pipe中的过程和函数,则必须要为用户授权。 sql>conn sys/oracle as sysdba; sql>grant execute on dbms_pipe to scott;
一、管道:
二、DBMS_PIPE包的过程和函数解析 declare falg int; begin flag:=dbms_pipe.create_pipe('public_pipe',8192,false); if flag=0 then dbms_output.put_line('建立公用管道成功'); end if; end; /
PACK_MESSAGE:用于将消息写入到本地消息缓冲区
案例: CREATE OR REPLACE PROCEDURE SEND_MESSAGE(PIPENAME VARCHAR2, MESSAGE VARCHAR2) IS FLAG NUMBER; BEGIN FLAG := DBMS_PIPE.CREATE_PIPE(PIPENAME); IF FLAG = 0 THEN DBMS_PIPE.PACK_MESSAGE(MESSAGE); FLAG := DBMS_PIPE.SEND_MESSAGE(PIPENAME); END IF; END; / 2、创建一个接收消息的包 CREATE OR REPLACE PROCEDURE RECEIVE_MESSAGE(PIPENAME VARCHAR2, MESSAGE OUT VARCHAR2) IS FLAG NUMBER; BEGIN FLAG := DBMS_PIPE.RECEIVE_MESSAGE(PIPENAME); IF FLAG = 0 THEN DBMS_PIPE.UNPACK_MESSAGE(MESSAGE); FLAG := DBMS_PIPE.REMOVE_PIPE(PIPENAME); END IF; END; / 3、运行包 --在一个会话中执行: exec send_message('pipe','I send message'); --在另一会话中执行: var message varchar2(200); exec receive_message('pipe',:message); print message;
执行结果如下: (责任编辑:IT) |