Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Шрифт:
/* DECLARE EXTERNAL FUNCTION ascii_char
INTEGER
RETURNS CSTRING(1) FREE_IT
ENTRY_POINT 'IB_UDF_ascii_char' MODULE_NAME 'ib_udf'^
COMMIT^
/* Под конец сама хранимая процедура, создающая текстовый файл, эквивалентный приложению 10 данной книги*/
CREATE PROCEDURE OUTPUT ERRCODES
AS
DECLARE VARIABLE SQC SMALLINT;
DECLARE VARIABLE NUM SMALLINT;
DECLARE VARIABLE FAC SMALLINT;
DECLARE VARIABLE SYM VARCHAR(32);
DECLARE VARIABLE TXTVARCHAR(118) ;
DECLARE VARIABLE GDC CHAR(9) CHARACTER SET OCTETS
DECLARE VARIABLE BASEO INTEGER = 335544320;
DECLARE VARIABLE CALCNUM INTEGER;
DECLARE VARIABLE EOL CHAR(2) ;
BEGIN
EOL = ASCII_CHAR(13) || ASCII_CHAR(10);
/*
FOR SELECT
S.SQL_CODE,
S.NUMBER,
S.FAC_CODE,
S. GDS_SYMBOL,
M.TEXT
FROM SYSTEM_ERRORS S
JOIN MESSAGES M
ON
M.FAC_CODE = S.FAC_CODE
AND M.NUMBER = S.NUMBER
AND M.SYMBOL = S.GDS_SYMBOL
/* Устранение некоторых нежелательных/ненужных кодов */
WHERE M.TEXTNOT CONTAINING 'journal'
AND M.TEXTNOT CONTAINING 'dump'
AND s.GDS_SYMBOL NOT CONTAINING 'license'
AND S.GDS_SYMBOL NOT CONTAINING 'wal_'
AND S. GDS_SYMBOLIS NOT NOLL
AND S.SQL_CODE < 102
ORDER BY1 DESC, 2
INTO :SQC, :NUM, :FAC, :SYM, :TXT
DO
BEGIN
/* Тексты сообщений в нижнем регистре, следовательно, мы выполним небольшой трюк для перевода в верхний регистр первой буквы */
IF (TXT IS NULL) THEN
TXT = '(Message unknown)';
ELSE
TXT = UPPER(SUBSTRING(TXT FROM 1 FOR 1)) ||
SUBSTRING(TXT FROM 2);
/* Разработанные значения кодов (FAC_CODE) и чисел NUMBER используются для генерации чисел GDSCODE. Очень просто получить их из последних таблиц SYSTEM_ERRORS и MESSAGES */
IF (FAC IS NOT NULL AND NUM IS NOT NULL) THEN
/* Нам не нужны наполовину приготовленные коды ошибок! */
BEGIN
CALCNUM = BASE0 + (FAC * 65535);
CALCNUM = CALCNUM + NUM + FAC;
GDC = CAST(CALCNUM AS CHAR(9));
INSERT INTO ERRORCODES
VALUES(
/* все переменные поступают в одной строке */
:SQC || ' | ' || :GDC | | ' | ' || :SYM | | ' |' | | :TXT || :EOL) ;
END
END
END ^
COMMIT^
EXECUTE PROCEDURE OUTPUT_ERRCODES ^
COMMIT ^
SET TERM ; ^
/* Текстовый файл теперь готов к обработке текстовым процессором для небольшой корректировки, чтобы избавиться от лишних пробелов, созданных в правой части выходной строки. Быстрый поиск и замена заменят все разделители '|' на ASCII 9 (tab), потому что это было требованием к табуляции для печати. */
События
События Firebird предоставляют механизм сигнализации, с помощью которого хранимые процедуры и триггеры могут передавать сообщения клиентским приложениям, когда другие приложения подтверждают изменения данных. Клиентские приложения устанавливаются в режим "прослушивания" конкретных событий через интерфейс сервер-клиент без системных затрат на опрос наличия изменений.
Клиентские подсистемы, которые запрашивают у сервера новости
Когда транзакция подтверждается, сообщения обо всех произошедших событиях передаются всем ожидающим их клиентским приложениям. После этого клиентское приложение может отреагировать на это событие любым образом.
Использование сообщений о событиях
Система сообщений о событиях в Firebird может соответствовать большому количеству требований приложения, которое вызывает эти средства для быстрого реагирования на изменения состояния базы данных, выполненные другими пользователями базы данных. Такие техники могут быть использованы в комбинации со средствами удаленной связи, процессом управления, технологиями планирования и передачи сообщений для автоматизации критичных по времени потоков реагирования.
Эти возможности безграничны в терминах масштаба и приложения. Некоторыми примерами являются:
* сервисы фоновой репликации данных запрашивают новый элемент;
* приложение продажи билетов использует эту схему в качестве сигнала для обновления открытых наборов данных в других офисах, когда происходит изменение выделенных мест или расписания;
* приложение инвентаризации выдает отделу закупок сообщение "запас на исходе", когда количество элементов инвентаризации находится ниже минимально допустимого уровня запасов;
* розничные магазины информируются о загрузке нового прайс-листа;
* устройство слежения за механическим процессом сигнализирует о низком уровне запасов сырья.
Элементы механизма
Инициаторами событий являются операции изменения состояния базы данных - успешно выполненные операции INSERT, UPDATE и DELETE. Сигнализация о событии выполняется в триггерах или хранимых процедурах с помощью оператора PSQL
POST_EVENT.
Однако POST EVENT является только одним элементом этого механизма- изолированно он ничего не делает. Это просто посылка сигнала слушающим приложениям. Он не несет никакой информации, о каком событии базы данных он сигнализирует; задачей приложения является обеспечение собственного контекста для каждого события.
Сам механизм событий состоит из нескольких взаимодействий между серверной стороной и приложением.
Элементами на стороне сервера являются:
* один или более триггеров или хранимых процедур, которые выдают оператор
POST_EVENT;
* внутренняя таблица событий - адресат вызовов POST_EVENT - содержит список направленных ей событий процедурами и триггерами во время работы транзакций, при которых возникли события;
Неудержимый. Книга VIII
8. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Законы Рода. Том 6
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
рейтинг книги
Восход. Солнцев. Книга I
1. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Попаданка
Любовные романы:
любовно-фантастические романы
рейтинг книги
Возлюби болезнь свою
Научно-образовательная:
психология
рейтинг книги
