Чтение онлайн

на главную - закладки

Жанры

Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ

Борри Хелен

Шрифт:

Объявление именованного курсора, который должен быть вначале скомпилирован в ESQL или задан в структуре API в DSQL, включает переменную оператора клиентской стороны, которая указывает на этот оператор. Клиентское приложение является ответственным за то, что подготовленный оператор доступен для назначения соответствующему указателю при выполнении программы.

PSQL имеет языковое расширение, которое принимает следующую форму:

FOR SELECT <любая допустимая спецификация выборки>

INTO <список предварительно объявленных локальных переменных> DO

BEGIN

Необязательные действия над переменными>;

SUSPEND;

END

Это

синтаксис неименованного курсора [65] .

Целью операций с курсором является использование данных из набора курсора и последовательное "действие" с каждой строкой набора курсора. Это может быть эффективным для наборов пакетных процессов, где выполняется одна или более задач над текущей строкой курсора в рамках одной итерации в цикле над набором курсора. Например, в каждой итерации элемент данных должен быть получен из текущей строки набора курсора и использован для добавления новой строки в указанный входной набор.

65

Фактически синтаксис именованного курсора доступен как "скрытая возможность" и в PSQL, хотя он не полностью реализован в Firebird 1.5. Синтаксис был расширен после версии 1.5 и должен появиться в последующих релизах.

Другой оператор может быть связан с открытым курсором при использовании WHERE CURRENT OF <имя-курсора> вместо условия поиска для выполнения позиционированного изменения или удаления строк, "отмеченных" набором курсора.

Реализация курсоров

Firebird предоставляет несколько методов для реализации курсоров.

* Встраиваемый SQL (ESQL) предоставляет оператор DECLARE CURSOR [66] для реализации предварительно компилированного объявления именованного курсора.

66

Более подробную информацию см. в Embedded SQL Guide (EmbedSQL.pdf) в документации по InterBase 6.0, опубликованной Borland.

* Для использования курсора динамическое приложение должно предварительно объявить его в функции isc_dsqi_set_cursor_name [67] . Только некоторые компоненты реализуют такой интерфейс, большинство других - нет.

* Язык PSQL предоставляет синтаксис для работы с именованными и неименованными курсорами локально внутри хранимой процедуры или триггера. Подробную информацию см. в главе 29.

! ! !

ПРИМЕЧАНИЕ. За исключением техник работы с курсорами в PSQL сами курсоры выходят за пределы темы настоящей книги. Подробную информацию см. в главе 30.

67

Программисты прямого API и разработчики компонентов интерфейса могут получить больше информации из InterBase API Guide (APIGuide.pdf) в документации по InterBase 6.0, опубликованной Borland.

. ! .

Вложенные наборы

Вложенные наборы формируются с использованием синтаксиса специального вида выражений SQL, называемых подзапросами. Этот вид выражений принимает форму вложенного оператора SELECT, который может быть включен в список спецификаций столбцов главного запроса

для получения одного значения строки, или в предложение WHERE как часть условия поиска. Допустимый синтаксис SELECT изменяется в зависимости от контекста, в котором используется подзапрос.

В следующем простом примере запрос к таблице TABLEA использует вложенный подзапрос для включения в выходной набор на время выполнения столбца с именем DESCRIPTION, наследующего значение из столбца COLA таблицы TABLEB:

SELECT COL1, COL2, COL3,

(SELECT COLA FROM TABLEB WHERE COLX='Espagnol')

AS DESCRIPTION

FROM TABLEA

WHERE ... ;

Обратите внимание на использование ключевого слова AS для присваивания имени (DESCRIPTION) наследуемому столбцу. Это делать необязательно, но рекомендуется для ясности кода.

Очень часто включенный запрос является коррелированным с главным запросом. Коррелированный запрос - это запрос, чье предложение WHERE связано с одним или более значениями выходного списка внешнего запроса или с другими значениями таблиц из внешнего запроса. Коррелированный подзапрос похож по своему действию на INNER JOIN и иногда может быть использован для повышения производительности вместо JOIN.

Темы подзапросов подробно обсуждаются в следующих двух главах, особенно в главе 22.

Привилегии

Чтение из таблиц и запись в таблицы являются привилегиями базы данных, управляемыми объявлениями, выполненными с помощью операторов GRANT и REVOKE (см. главу 35).

Оператор SELECT

Оператор SELECT является для клиентов фундаментальным методом поиска наборов данных в базе данных. Он имеет следующую основную форму:

SELECT

[FIRST (m)] [SKIP (n)] [[ALL] | DISTINCT]

<список-столбцов> [, [имя-столбца] | выражение | константа ]

AS имя-алиаса]

FROM <таблица-или-процедура-или-просмотр>

[{[[INNER] | [{LEFT | RIGHT | FULL} [OUTER]] JOIN}]

<таблица-или-процедура-или-просмотр>

ON <условия-соединения> [{JOIN...}]

[WHERE <условия-поиска>]

[GROUP BY <список-группируемых-столбцов>]

[HAVING <предикат-группирования>]

[UNION <выражение-выбора> [ALL]]

[PLAN <выражение-плана>]

[ORDER BY <список-столбцов>]

[FOR UPDATE [OF столбец1 [, столбец2...]] [WITH LOCK]]

Предложения в операторе SELECT

В следующих подразделах мы предварительно рассмотрим каждое доступное в операторе SELECT предложение. Большинство предложений является необязательным, при этом важно их использование в правильном порядке.

Необязательные режимы выборки

За ключевым словом SELECT может следовать режим выборки для управления включением строк в выходной набор, когда они соответствуют всем другим условиям.

ALL

Это значение по умолчанию режима выборки для выходного списка и обычно опускается. Оно возвращает все строки, соответствующие условиям в спецификации.

DISTINCT

Этот режим выборки подавляет вывод всех дубликатов строк в выходной набор. Например, таблица EMPLOYEE_PROJECT хранит пересекающиеся записи для каждой комбинации служащего (EMP_NO) и проекта (PROJ_ID), поддерживая отношение многие-ко- многим. Конкатенация EMP NO + PROJ_ID образует первичный ключ. Оператор

Поделиться:
Популярные книги

Матабар. II

Клеванский Кирилл Сергеевич
2. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар. II

Архил...?

Кожевников Павел
1. Архил...?
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Архил...?

Жандарм

Семин Никита
1. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
4.11
рейтинг книги
Жандарм

На границе империй. Том 8. Часть 2

INDIGO
13. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 8. Часть 2

Проводник

Кораблев Родион
2. Другая сторона
Фантастика:
боевая фантастика
рпг
7.41
рейтинг книги
Проводник

Эволюционер из трущоб. Том 5

Панарин Антон
5. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 5

Кротовский, сколько можно?

Парсиев Дмитрий
5. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Кротовский, сколько можно?

Отверженный. Дилогия

Опсокополос Алексис
Отверженный
Фантастика:
фэнтези
7.51
рейтинг книги
Отверженный. Дилогия

Имя нам Легион. Том 3

Дорничев Дмитрий
3. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 3

Отморозок 4

Поповский Андрей Владимирович
4. Отморозок
Фантастика:
попаданцы
фантастика: прочее
5.00
рейтинг книги
Отморозок 4

Идеальный мир для Лекаря 21

Сапфир Олег
21. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 21

Невеста инопланетянина

Дроздов Анатолий Федорович
2. Зубных дел мастер
Фантастика:
космическая фантастика
попаданцы
альтернативная история
5.25
рейтинг книги
Невеста инопланетянина

Здравствуй, 1984-й

Иванов Дмитрий
1. Девяностые
Фантастика:
альтернативная история
6.42
рейтинг книги
Здравствуй, 1984-й

Экзо

Катлас Эдуард
2. Экзо
Фантастика:
боевая фантастика
постапокалипсис
8.33
рейтинг книги
Экзо