Вопрос по DBMS_PIPE
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Вопрос по DBMS_PIPE Expand / Collapse
Автор
Сообщение
29.03.2002 11:25
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
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;
Выкладывает сообщения из буффера в канал.

А вот дальше... Как мне из канала эти сообщения получить - разобраться не могу...Может поможете,а?
Сообщ. #745491
03.04.2002 19:03
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum 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
Сообщ. #746004
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 11:42