• DBMS_PIPE包


    DBMS_PIPE包用于同一个实例,不同会话(用户)之间进行通信。管道的信息被缓存在系统全局区SGA中,当关闭Oracle实例(Instance)时,就会丢失管道信息。

    管道分为两类:

    (1)公有管道:所有数据库用户都可以访问的管道,因此要想在同一个实例的不同用户之间建立管道,要使用公有管道。

    (2)私有管道:只能由建立管道的数据库用户访问。

    管道发送方:

    (1)创建管道 create_pipe

    语法:

    DBMS_PIPE.create_pipe(pipename in varchar2,
                          maxpipesize in integer default 8192,
                          private in boolean default TRUE)
              return integer;

    (2)写信息到本地缓存区 pack_message(打包)

    语法:

    DBMS_PIPE.pack_message(message in {varchar2, number, date});

    (3)将本地缓存区中的消息 发送到 管道pipename 中   send_message

    语法:

    1 DBMS_PIPE.send_message(pipename in varchar2,
    2                        timeout  in integer   default MAXWAIT,
    3                        maxpipesize in integer default 8192)
    4           return integer;

    管道接收方:

    (1)从管道接收消息,写入本地缓冲区中  receive_message

    语法:

    1 DBMS_PIPE.receive_message(pipename in varchar2,
    2                           timeout in integer default MAXWAIT)
    3           return integer;

    (2)读取缓冲区的数据 UNPACK_MESSAGE(拆包)

    语法:

    DBMS_PIPE.unpack_message(message out varchar2, number, date);

    (3)删除管道 remove_pipe

    语法:

    1 DBMS_PIPE.remove_pipe(pipename in varchar2)
    2           return integer;
     1 --发送消息管道
     2 create or replace procedure send_message_pipe(pipename  varchar2,
     3                                               message   varchar2) is
     4 --variable
     5   flag integer;                                              
     6                                               
     7 begin
     8   --创建管道
     9   flag := DBMS_PIPE.create_pipe(pipename);
    10   if flag = 0 then
    11      DBMS_PIPE.pack_message(message); --将消息写到本地缓冲区(打包)
    12      flag := DBMS_PIPE.send_message(pipename); --将本地缓冲区的消息发送到管道
    13   end if;
    14 end send_message_pipe;
     --接收消息管道
    1
    create or replace procedure receive_message_pipe(pipename varchar2, 2 message out varchar2) 3 is 4 5 --variable 6 flag integer; 7 begin 8 --接收管道消息,到本地缓冲区中 9 flag := DBMS_PIPE.receive_message(pipename); 10 if flag = 0 then 11 DBMS_PIPE.unpack_message(message); --从缓冲区中读取消息(拆包) 12 flag := DBMS_PIPE.remove_pipe(pipename); --移除管道 13 end if; 14 end receive_message_pipe;
  • 相关阅读:
    ADO.NET中容易混淆的概念(4)
    ADO.NET中容易混淆的概念(3)
    ADO.NET中容易混淆的概念(2)
    ADO.NET中容易混淆的概念(1)
    引用计数
    ADO.NET中SQL Server数据库连接池
    Python之禅!
    django总结
    Python第六周学习之Linux
    Python第五周前端学习之HTML5/ CSS / JS
  • 原文地址:https://www.cnblogs.com/ly01/p/8612161.html
Copyright © 2020-2023  润新知