|
Программирование >> Oracle
1560 Приложение А 6 order by line TEXT package dbms output as ОБЗОР - Зти процедуры накапливают информацию в буфере (с помощью put - и put line ) так, что ее можно выбрать в дальнейшем (с помощью get line или get lines ) . Если пакет отключен, то все вызовы - просто игнорируются. Так образом, эти подпрограммы активны, - только если клиент способен обработать поучаемую информацию. - Зто хорошо подходит для отладки или написания хран1х оце/р, - с помощью которых выдаются сообщения или отчеты в среде sql*dba - или plus (напрер, описательных процедур и т.п.) . - Стандартный размер буфера - 20000. Миндальный - 2000, а - максимальный -1000000 . - ПРИМЕР - Предположи, из триггера необходо выдать отладочную информацию. - Для этого в триггере можно вызвать dbms output.put line(Мы получили: :new.col - новое значение) ; - Если клиент включил пакет dbms output, строка-аргумент put line - будет помещена в буфер и клиент, выполнив оператор (едположительно, оператор вставки, удаления или изменения, - вызвавшего срабатывание триггера) , сможет выполнить 2 5 rows selected. В базе данных скрыт оперативный источник документации. Спецификация каждого из рассматриваемых пакетов содержит достаточно полное описание назначения пакета, действий каждой функции и процедуры, а также их использования. Это очень удобно при отсутствии документации, но и при ее наличии тоже пригодится, поскольку спецификация иногда содержит данные, отсутствующие в документации, или полезные примеры. Далее мы рассмотрим пакеты, являющиеся большим подспорьем при постоянной работе с СУБД Oracle. Эти пакеты часто используются всеми разработчиками. Мы также рассмотрим новые пакеты и способы обхода некоторых ограничений этих встроенных пакетов, с которыми, как я знаю по своему опыту, часто сталкиваются разработчики. Пакеты DBMS ALERT и DBMS PIPE Пакеты DBMS ALERT и DBMS PIPE - очень мощные средства межпроцессного взаимодействия. Оба они обеспечивают возможность взаимодействия сеансов базы дан-н1х. Пакет DBMS ALERT по функциональности во многом аналогичен сигналам операционной системы UNIX, a DBMS PIPE очень похож на именованный канал UNIX. Поскольку разработчики приложений часто сомневаются, какой пакет в каких случаях использовать, я решил описать их вместе. Пакет DBMS ALERT создавался для того, чтобы сеанс мог сигнализировать об определенном событии в базе данных. Другие сеансы, которых касается это событие, получают уведомление о том, что оно произошло. Уведомления эти пос1лаются в рамках транзакций, т.е. можно сигнализировать о событии в триггере или хранимой процедуре, но пока соответствующая транзакция не зафиксирована, уведомление ожидающим сеансам не пос1лается. Если транзакция отменена, уведомление не будет послано. Важно понимать, что сеанс, которому необходимо получить уведомление о событии в базе данных, должен либо периодически опрашивать базу данных, не поступил ли соответствующий сигнал, либо просто ждать в заблокированном состоянии возникновения соответствующего события. Пакет DBMS PIPE более универсален. Он позволяет одному или нескольким сеансам читать сообщения с одной стороны именованного канала и при этом записывать сообщения в этот канал с другой стороны. Только один из читающих сеансов может получить сообщение, причем адресовать сообщение конкретному сеансу по одному именованному каналу нельзя. Если читающих сеансов больше одного, прочитает записанное в канал сообщение любой из них. Каналы не поддерживают транзакции: если сообщение послано, оно будет доступным другим сеансам. Фиксировать транзакцию не 1562 Приложение А надо, а фиксация или откат соответствующей транзакции не повлияет на результат передачи сообщения по каналу. Когда использовать сигналы и каналы Основное отличие между сигналами и каналами - это поддержка (или отсутствие поддержки) транзакций. С помощью сигналов можно передать сообщение одному или нескольким сеансам после того, как некоторое действие успешно зафиксировано в базе данных. Каналы позволяют немедленно передать сообщение одному сеансу. Сигнала: имеет смысл использовать, например, в следующих случаях. На экране в виде графической диаграммы отображаются данные о курсе акций. Когда информация о курсе изменяется в базе данных, необходимо уведомить приложение, чтобы изменить соответственно экран. При добавлении новой записи в таблицу необходимо выдать в приложении диалоговое окно, уведомляющее пользователя о новом задании. Каналы базы данных имеет смысл использовать, например, в следующих случаях. На другой машине в сети работает процесс, выполняющий определенные действия. Надо послать процессу сообщение с требованием выполнить необходимое действие. В этом случае канал базы данных используется аналогично сокету TCP/IP. Необходимо поставить в очередь в области SGA данные, которые должны бгть прочитаны и обработаны другим процессом. При этом канал базы данных используется как непостоянная очередь (FIFO), доступная для чтения нескольким различным сеансам. Можно привести и другие примеры использования пакетов, но это - наиболее типичные варианты использования сигналов и каналов, позволяющие понять, когда именно надо применять каждый из пакетов. Сигналы используются для уведомления множества пользователей о произошедшем событии (после фиксации). Каналы используются для немедленной передачи сообщения другому сеансу (и, как правило, ожидания от него ответа). Теперь, когда назначение сигналов и каналов понятно, рассмотрим детали реализации каждого из этих механизмов. Настройка Пакеты DBMS ALERT и DBMS PIPE стандартно устанавливаются в базе данных. В отличие от многих стандартных пакетов, привилегия EXECUTE для этих пакетов роли PUBLIC не предоставляется. В Oracle 8.0 и выше привилегия EXECUTE для этих пакетов предоставляется роли EXECUTE CATALOG ROLE. В предыдущих версиях никакие привилегии на эти пакеты по умолчанию не предоставлялись. Поскольку привилегия EXECUTE предоставлена роли, причем - не PUBLIC, вы не сможете создать хранимую процедуру, зависящую от этих пакетов, поскольку при компиляции хранимого кода роли никогда не действуют. Необходимо явно предоставить привилегию EXECUTE соответствующей учетной записи.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |