русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

ПОСЫЛКА СООБЩЕНИЙ


Дата добавления: 2013-12-24; просмотров: 1252; Нарушение авторских прав


Как уже указывалось выше, сообщения посылаются в два этапа. Сначала данные упаковываются в локальном буфере сообщений, а затем содержимое буфера посылается по каналу. Упаковка данных осуществляется с помощью процедуры РАСК_MESSAGE, а посылка – с помощью функции SEND_MESSAGE.

Процедура РАСК_MESSAGE переопределяется различными типами элементов данных. На принимающей стороне канала процедура UNPACK_MESSAGE также переопределяется различными типами. Описание процедуры РАСК_MESSAGE выглядит следующим образом:

 

procedure PACK_MESSAGE (item in varchar2);

procedure РАСК_MESSAGE (item in number);

procedure PACK_MESSAGE (item in date);

 

Размер буфера равен 4096 байтам. Если общий размер упакованных данных превышает это значение, то генерируется ошибка “ORA-6558: Buffer in DBMS_PIPE package is full. No more items allowed” (Буфер модуля DBMS_PIPE заполнен. Ввод других элементов запрещен). Для каждого элемента данных в буфере отводится 1 байт для типа данных, 2 байта – для их длины, 1 дополнительный байт для завершения сообщения, а также пространство для самих данных. В ORACLE 8 и выше 2 байта необходимы для идентификатора набора символов и 1 дополнительный байт для формы набора символов. Таким образом, в ORACLE 8 для каждого элемента необходимо 7 вспомогательных байтов, а в ORACLE 7 – 4.

Когда после одного или нескольких вызовов РАСК_MESSAGE локальный буфер сообщений заполняется данными, его содержимое с помощью SEND_MESSAGE посылается по каналу:

 

 

function SEND_MESSAGE (pipename in varchar2, timeout in integer

default MAXWAIT,

maxpipesize in integer default 8192)

return integer;

 

Если программный канал еще не создан, то функция SEND_MESSAGE создает его. Каналы можно создавать и с помощью процедуры СRЕАТЕ_РIРЕ, которая применяется в РL/SQL версии 2.2 и выше и описана ниже в параграфе “Создание программных каналов и управление ими”. Параметры функции SEND_MESSAGE описаны в следующей таблице:



 

Таблица 12 Параметры функции SEND_MESSAGE

Параметр Тип Описание
pipename varchar2 Имя канала; имена каналов ограничены 30 символами и не чувствительны к регистру символов.
timeout integer Задержка в секундах. Если в силу различных причин (указанных возвращаемым кодом) сообщение не может быть послано, то вызов возвращает число секунд после задержки. Значение по умолчанию DBMS_PIPE.MAXWAIT равно 86 400 000 секундам (1000 дней).
maxpipesize integer Общий размер канала в байтах. По умолчанию устанавливается равным 8 192 байтам (два сообщения максимального размера). Сумма размеров всех сообщений в канале не может превышать этого значения (когда сообщение получается с помощью RECEIVE_MESSAGE, оно удаляется из канала). После создания канала его максимальный размер становится элементом его описания и сохраняется на все время его существования. В разных вызовах SEND_MESSAGE можно указывать разные значения параметра MAXPIPESIZE. Если новое значение больше существующего размера, то размер канала увеличивается. Если же новое значение меньше, то сохраняется существующий размер.

 

Значение, возвращаемые функцией SEND_MESSAGE, описаны в таблице 13.

 

Таблица 13 Значение, возвращаемые функцией SEND_MESSAGE

Возвращаемое значение Описание
Сообщение успешно послано и при вызове RECEIVE_MESSAGE будет считано.
Вызов задержан. Это может произойти в том случае, если канал слишком заполнен, и сообщение передаться не может, либо если нельзя установить блокировку данного канала.
Вызов прерван из-за внутренней ошибки.

 

 



<== предыдущая лекция | следующая лекция ==>
ВЗАИМОДЕЙСТВИЕ МЕЖДУ СОЕДИНЕНИЯМИ (МОДУЛЬ DBMS_PIPE) | ПОЛУЧЕНИЕ СООБЩЕНИЙ


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.119 сек.