DBMSPIPE позволяет посылать сообщения между сеансами, подключенными к одной базе данных. Сеансы могут быть различными клиентскими программами, либо они могут выполняться на различных машинах. Если они способны посылать команды PL/SQL на сервер, то они могут общаться. Например, можно использовать 1)JBMS_PIPE для коммуникации между хранимой процедурой и программой Рто*С. Этим обеспечивается функциональность, аналогичная внешней процедуре.
Каналы (pipe) являются асинхронными — они действуют независимо от транзакций. Не существует способа отменить сообщение, посланное в канал, даже если сеанс, который его послал, выполнил ROLLBACK. Следовательно, каналы могут использоваться для выполнения автономных
транзакций.
Сообщения посылаются в канал отправителем, который сначала упаковывает их в буфер, а затем посылает буфер. Приемник получает буфер и распаковывает сообщение. Предположим, что в сеансе SQL*Plus выполняется следующий блок:
Этот код посылает сообщение, содержащее дату, число и строку, в канал MyPipe. Можно получить это сообщение в другом (или в том же самом) сеансе SQL*Plus, соединенном с той же базой данных, с помощью следующего кода:
DBMS_PIPE может применяться для отправки сообщений, содержащих данные VARCHAR2, NUMBER, DATE, RAW или ROWID. Определенные пользователем объектные типы и сборные конструкции не поддерживаются DBMS_PIPE. Для отправки сообщений с данными этих типов можно использовать Oracle Advanced Queuing.
< Предыдущая | Следующая > |
---|