oracle系统包——DBMS

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6


DBMS_PIPE包用于在同一例程(实例)的不同会话之间进行通信;注意,如果用户要执行包dbms_pipe中的过程和函数,则必须要为用户授权。



sql>conn sys/oracle as sysdba;
sql>grant execute on dbms_pipe to scott;



一、管道:
1)、公有管道:所有数据库用户可访问。
2)、私有管道:只能建立管道的数据库用户可访问。

二、DBMS_PIPE包的过程和函数解析
CREATE_PIPE:用于建立公用管道或私有管道。如果将参数private设置为TRUE,则建立私有管道;如果设置为FALSE,则建立公用管道。
eg:   



oracle系统包——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;
/



oracle系统包——DBMS_PIPE用法_数据库






PACK_MESSAGE:用于将消息写入到本地消息缓冲区
SEND_MESSAGE:用于将本地消息缓冲区中的内容发送到管道
RECEIVE_MESSAGE:用于接收管道消息
NEXT_ITEM_TYPE:用于确定本地消息缓冲区下一项的数据类型。
如果该函数返回0,则表示管道没有任何消息;
如果返回6,则表示下一项的数据类型为number;
如果返回9,则表示下一项的数据类型为varchar2;
如果返回11,则表示下一项的数据类型为rowid;
如果返回12,则表示下一项的数据类型为date;
如果返回23,则表示下一项的数据类型为raw.
UNPACK_MESSAGE:用于将消息缓冲区的内容写入到变量中.
REMOVE_PIPE:用于删除已经建立的管道
PUGER:用于清除管道中的内容
RESET_BUFFER:用于复位管道缓冲区
UNIQUE_SESSION_NAME:用于为特定会话返回惟一的名称,并且名称的最长度为30字节.

案例:
1、创建一个发消息的过程:


oracle系统包——DBMS_PIPE用法_数据库


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;
/



oracle系统包——DBMS_PIPE用法_数据库






2、创建一个接收消息的包



oracle系统包——DBMS_PIPE用法_数据库



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;
/



oracle系统包——DBMS_PIPE用法_数据库






3、运行包



--在一个会话中执行:
exec send_message('pipe','I send message');
--在另一会话中执行:
var message varchar2(200);
exec receive_message('pipe',:message);
print message;






执行结果如下:
PL/SQL procedure successfully completed
message
———
I send message

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: oracle