Хелен Борри - Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
- Название:Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2006
- Город:Санкт-Петербург
- ISBN:5-94157-609-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Хелен Борри - Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ краткое содержание
Рассмотрены вопросы, необходимые разработчику для создания клиент-серверных приложений с использованием СУБД Firebird, явившейся развитием СУБД Borland Interbase 6. Содержится обзор концепций и моделей архитектуры клиент/сервер, а также практические рекомендации по работе с клиентскими библиотеками Firebird. Детально описаны особенности типов данных SQL, язык манипулирования данными (Data Manipulation Language, DML), а также синтаксис и операторы языка определения данных ( Data Definition Language, DDL). Большое внимание уделено описанию транзакций и приведены советы по их использованию при разработке приложений. Описано программирование на стороне клиента и сервера написание триггеров и хранимых процедур, создание и использование событий базы данных, обработка ошибок в коде на сервере и многое другое. Материал сопровождается многочисленными примерами, советами и практическими рекомендациями.
Для разработчиков баз данных
Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
* Хорошо известная реализация представлена конструкцией FOR ... SELECT, которая полностью реализует синтаксис цикла и широко используется в процедурах выбора. Она подробно обсуждается в следующем разделе. При этом также допустимо выполнение цикла курсора FOR ... SELECT и внутри выполняемых процедур, как мы видели в предыдущем примере.
* Менее известной реализацией является ранняя реализация, иногда называемая изменяемым или именованным курсором, которая была наследована от ESQL и долгое время была осуждаема. Она представляет объект курсор и позволяет выполнять изменения и удаления. Ее синтаксис будет более понятен тем, кто использовал курсоры в языках процедур в других СУБД. Сейчас мы его вкратце рассмотрим.
! ! !
ПРИМЕЧАНИЕ. Синтаксис и механизм именованного курсора были заново реализованы в процессе разработки Firebird 2. Это краткое описание является лебединой песней старых курсоров, поскольку новый синтаксис вряд ли будет совместимым со старым.
. ! .
Его синтаксис выглядит следующим образом:
. . .
FOR SELECT <���список-столбцов>
FROM <���имя-таблицы>
FOR UPDATE
INTO <���переменные>
AS CURSOR <���имя-курсора>
DO
/* либо UPDATE ... */
BEGIN
UPDATE <���имя-таблицы>
SET ... WHERE CURRENT OF <���имя-курсора>;
. . .
END
/* или DELETE */
BEGIN
DELETE FROM <���имя-таблицы>
WHERE CURRENT OF <���имя-курсора>
END
. . .
Используйте его сейчас, но ждите изменений в более поздних версиях Firebird. Это очень быстрый способ добавить множество операций в хранимую процедуру, поскольку здесь используется RDB$DB_KEY для локализации записей. RDB$DB_KEY (или просто DBKEY) является внутренней возможностью, которая может быть использована во множестве ситуаций. См. разд. "Темы оптимизации: использование внутреннего RDB$DBKEY".
! ! !
СОВЕТ. Просмотрите заметки по релизу для нового синтаксиса курсора PSQL. На момент написания данной книги описание отсутствовало.
. ! .
Более поздняя реализация курсоров, обсуждаемая далее, является более гибкой.
Хранимые процедуры выбора
Хранимые процедуры выбора называются так, потому что они разрабатываются для выполнения с помощью оператора SELECT. для читателей, привыкших к техникам программирования на сервере, доступным в других СУБД, концепция хранимой процедуры, которая передает строки непосредственно вызвавшему приложению или процедуре без создания промежуточной "временной" таблицы, будет менее понятной, чем выполняемые процедуры.
Использование процедур выбора
Процедуры выбора могут быть использованы для виртуального задания любого набора, однако они особенно полезны, когда нужен набор, который не может быть извлечен или его извлечение выполняется медленно или слишком сложно в одном операторе DSQL.
Техника хранимых процедур выбора предоставляет колоссальную гибкость для извлечения наборов; эта техника превосходит логику, доступную в спецификациях
обычных операторов SELECT. Она делает возможным создавать набор буквально из любой комбинации хранимых у вас данных. Вы можете выполнять вычисления и трансформацию множества столбцов и строк в выходной набор. Например, выходные наборы с промежуточными суммами сложно или невозможно получить из динамического набора, но они могут быть быстро и эффективно сгенерированы с помощью хранимых процедур выбора.
Процедуры выбора могут легко генерировать наборы из данных, которые вообще не хранятся в базе данных. Мы все иногда находим применение этой технике. В следующем тривиальном примере список строк, разделенных запятыми, каждая из которых содержит 20 или менее символов, поступает в качестве входа. Процедура возвращает приложению каждую строку в нумерованном виде:
CREATE PROCEDURE BREAKAPART(
INPUTLIST VARCHAR(1024))
RETURNS (
NUMERO SMALLINT, ITEM VARCHAR (20)
)
AS
DECLARE CHARAC CHAR;
DECLARE ISDONE SMALLINT = 0;
BEGIN
NUMERO = 0;
ITEM = ' ' ;
WHILE (ISDONE = 0) DO
BEGIN
CHARAC = SUBSTRING (INPUTLI ST FROM 1 FOR 1);
IF (CHARAC = '') THEN
ISDONE = 1;
IF (CHARAC = OR CHARAC = '') THEN
BEGIN
NUMERO = NUMERO + 1;
SUSPEND;
/* Отправляет строку в буфер строк */
ITEM = '';
END
ELSE
ITEM = ITEM || CHARAC;
INPUTLIST = SUBSTRING(INPUTLIST FROM 2);
END
END ^
COMMIT;
/* */
SELECT * FROM BREAKAPART (' ALPHA, BETA, GAMMA, DELTA ') ;
NUMERO ITEM
1 ALPHA
2 BETA
3 GAMMA
4 DELTA
Часто сложные запросы, включающие множество соединений или подзапросов, бывают слишком медленными, чтобы удовлетворить интерактивные приложения. Некоторые запросы могут быть медленными по причине непропорциональности индексов внешних ключей. Поскольку есть возможность оперировать с наборами во внутренних циклах, хранимые процедуры способны создавать требуемые наборы гораздо быстрее и к тому же начинаются возвращать строки раньше, чем позволяют обычные последовательности SQL.
Техника
Техника извлечения и манипулирования данными выходного набора использует курсор для чтения по порядку каждой строки из оператора SELECT В предварительно объявленный набор переменных. Часто это могут быть выходные аргументы, куда помещаются значения столбцов, однако это могут быть и локальные переменные. Внутри цикла с переменными выполняются действия соответствующим образом: преобразовываются для вычислений, если необходимо, или используются как аргументы поиска для вложенных циклов, чтобы получать данные из других запросов. В конце цикла, когда все выходные аргументы получают конечные значения, оператор SUSPEND приводит к паузе в выполнении, пока этот набор передается в кэш строк. Выполнение возобновляется, когда вызывается следующая пересылка.
Как мы видели в предыдущем примере BREAKAPART, оператор SUSPEND является тем элементом, который заставляет процедуру передавать строку.
Конструкция FOR SELECT ... DO
Для поиска множества строк в процедуре мы используем конструкцию FOR SELECT ... DO. Ее синтаксис:
FOR
<���выражение-выбора>
INTO <:переменная [, :переменная [, ...]] DO
<���составной-оператор>;
<���выражение-выбора> может быть любым запросом выбора, использующим соединения, объединения, просмотры, другие процедуры выбора, вызовы функций и т.д. в любой допустимой комбинации.
Оператор FOR SELECT отличается от стандартного оператора SELECT тем, что требует наличия переменных, в которые помещаются значения столбцов, и спецификации полей.
<���составной-оператор> может быть одним оператором SUSPEND или блоком из двух или более операторов. <���составной-оператор> может иметь вложенные составные операторы.
FOR SELECT ... DO является конструкцией цикла, которая отыскивает строку, заданную в <���выражении-выбора>, и выполняет для каждой строки оператор или блок операторов, следующих после DO.
Читать дальшеИнтервал:
Закладка: