﻿<?xml version='1.0' encoding='UTF-8'?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Релиб / Oracle / Базы данных  / Вопрос по DBMS_PIPE / Latest Posts</title><generator>InstantForum.NET v4.1.4</generator><description>Релиб</description><link>http://relib.com/forums/</link><webMaster>robot@relib.com</webMaster><lastBuildDate>Sat, 22 Nov 2008 03:40:44 GMT</lastBuildDate><ttl>20</ttl><item><title>RE: Вопрос по DBMS_PIPE</title><link>http://relib.com/forums/Topic745491-21-1.aspx</link><description>В свое время тоже сэтим разбирался, вот что получилось:&lt;BR&gt;&lt;BR&gt;Использование DBMS_PIPE&lt;BR&gt;	Данный пакет позволяет обмениваться данными между сессиями. Одна сессия&lt;BR&gt;	посылает другая принимает данные. Если одну сессию слушают несколько&lt;BR&gt;	других сессий, то сообщение получит, только одна из них, поскольку&lt;BR&gt;	после приема сообщения оно удаляется из буфера, а буфер общий на все сессии.&lt;BR&gt;	Данный механизм не зависит от транзакции.&lt;BR&gt;&lt;BR&gt;	Посылающая сессия:&lt;BR&gt;	----------------------------&lt;BR&gt;	declare&lt;BR&gt;		s number;&lt;BR&gt;	begin&lt;BR&gt;		sys.dbms_pipe.pack_message('example1');&lt;BR&gt;		s:=dbms_pipe.send_message('otheruser');&lt;BR&gt;		if s&amp;lt;&amp;gt;0 then&lt;BR&gt;			raise_application_error(-20001,'Pipe Error!');&lt;BR&gt;		end if;&lt;BR&gt;	end;&lt;BR&gt;	Statement processed.&lt;BR&gt;&lt;BR&gt;	Принимающая сессия(отдельный логин):&lt;BR&gt;	----------------------------&lt;BR&gt;	declare&lt;BR&gt;		s number;&lt;BR&gt;		ss varchar2(10);&lt;BR&gt;		nn number;&lt;BR&gt;	begin&lt;BR&gt;		s:=dbms_pipe.receive_message('otheruser',3); --timeout 3 sec&lt;BR&gt;		if s&amp;lt;&amp;gt;0 then&lt;BR&gt;			dbms_output.put_line('no messages');&lt;BR&gt;		else&lt;BR&gt;			dbms_output.put_line('get message');&lt;BR&gt;			s:=dbms_pipe.next_item_type;&lt;BR&gt;			if s=9 then --тип данных VARCHAR2&lt;BR&gt;				dbms_pipe.unpack_message(ss);&lt;BR&gt;				dbms_output.put_line('string='||ss);&lt;BR&gt;			elsif s=6 then --тип данных NUMBER&lt;BR&gt;				dbms_pipe.unpack_message(nn);&lt;BR&gt;				dbms_output.put_line('number='||to_char(nn));&lt;BR&gt;			end if;&lt;BR&gt;		end if;&lt;BR&gt;	end;&lt;BR&gt;	Statement processed.&lt;BR&gt;	get message&lt;BR&gt;	string=example1</description><pubDate>Wed, 03 Apr 2002 19:03:00 GMT</pubDate><dc:creator>mmoroz</dc:creator></item><item><title>Вопрос по DBMS_PIPE</title><link>http://relib.com/forums/Topic745491-21-1.aspx</link><description>Господа, кто сталкивался с этим пакетом, подскажите:&lt;BR&gt;Разобрался пока вот в чем - &lt;BR&gt;DBMS_PIPE.CREATE_PIPE (pipename IN VARCHAR2, maxpipesize IN INTEGER DEFAULT 8192, private IN BOOLEAN DEFAULT TRUE)&lt;BR&gt;Создает канал.&lt;BR&gt;&lt;BR&gt;DBMS_PIPE.PACK_MESSAGE (item  IN  VARCHAR2);&lt;BR&gt;Кладет сообщение в локальный буффер сессии.&lt;BR&gt;&lt;BR&gt;DBMS_PIPE.SEND_MESSAGE (pipename IN VARCHAR2, timeout IN INTEGER DEFAULT MAXWAIT, maxpipesize  IN INTEGER DEFAULT 8192) RETURN INTEGER;&lt;BR&gt;Выкладывает сообщения из буффера в канал.&lt;BR&gt;&lt;BR&gt;А вот дальше... Как мне из канала эти сообщения получить - разобраться не могу...Может поможете,а?</description><pubDate>Fri, 29 Mar 2002 11:25:00 GMT</pubDate><dc:creator>tovSuhov</dc:creator></item></channel></rss>