|
|
|
новичок
      
участник
Last Login: 08.04.2002 7:00
Сообщ.: 6,
Visits: 67
|
|
Господа, кто сталкивался с этим пакетом, подскажите: Разобрался пока вот в чем - DBMS_PIPE.CREATE_PIPE (pipename IN VARCHAR2, maxpipesize IN INTEGER DEFAULT 8192, private IN BOOLEAN DEFAULT TRUE) Создает канал.
DBMS_PIPE.PACK_MESSAGE (item IN VARCHAR2); Кладет сообщение в локальный буффер сессии.
DBMS_PIPE.SEND_MESSAGE (pipename IN VARCHAR2, timeout IN INTEGER DEFAULT MAXWAIT, maxpipesize IN INTEGER DEFAULT 8192) RETURN INTEGER; Выкладывает сообщения из буффера в канал.
А вот дальше... Как мне из канала эти сообщения получить - разобраться не могу...Может поможете,а?
|
|
|
|
|
Forum Guru
      
участник
Last Login: 24.04.2002 10:25
Сообщ.: 72,
Visits: 793
|
|
В свое время тоже сэтим разбирался, вот что получилось:
Использование DBMS_PIPE Данный пакет позволяет обмениваться данными между сессиями. Одна сессия посылает другая принимает данные. Если одну сессию слушают несколько других сессий, то сообщение получит, только одна из них, поскольку после приема сообщения оно удаляется из буфера, а буфер общий на все сессии. Данный механизм не зависит от транзакции.
Посылающая сессия: ---------------------------- declare s number; begin sys.dbms_pipe.pack_message('example1'); s:=dbms_pipe.send_message('otheruser'); if s<>0 then raise_application_error(-20001,'Pipe Error!'); end if; end; Statement processed.
Принимающая сессия(отдельный логин): ---------------------------- declare s number; ss varchar2(10); nn number; begin s:=dbms_pipe.receive_message('otheruser',3); --timeout 3 sec if s<>0 then dbms_output.put_line('no messages'); else dbms_output.put_line('get message'); s:=dbms_pipe.next_item_type; if s=9 then --тип данных VARCHAR2 dbms_pipe.unpack_message(ss); dbms_output.put_line('string='||ss); elsif s=6 then --тип данных NUMBER dbms_pipe.unpack_message(nn); dbms_output.put_line('number='||to_char(nn)); end if; end if; end; Statement processed. get message string=example1
|
|
|
|