Поскольку вы можете работать с этой книгой в том порядке, который вам подходит, то вопросы влияния диалекта SQL будут отмечены соответствующим образом. Некоторые из наиболее серьезных эффектов разных диалектов проявляются в различии между типами данных. Вопросам диалектов посвящен разд. "Специальная тема миграции: диалекты SQL" этой главы.
Идентификаторы с разделителями в SQL-92
В базах данных диалекта 3 Firebird поддерживает соглашение ANSI SQL о необязательных идентификаторах с разделителями. Для использования зарезервированных слов, строк, чувствительных к регистру, или пробелов в именах объектов заключите имя в двойные кавычки. Это имя становится идентификатором с разделителями. К идентификаторам с разделителями всегда нужно обращаться, заключив их в кавычки.
Подробности см. в разд. "Соглашения и ограничения в именовании объектов базы данных" главы 14. Более подробную информацию об именовании объектов базы данных с использованием операторов CREATE и DECLARE см. в части IV этой книги. В приложении 11 представлен список ключевых слов, которые являются зарезервированными словами в SQL.
Firebird делает доступным множество значений переменных, поддерживаемых системой в контексте текущего соединения клиента и его деятельности. Эти контекстные переменные доступны для использования в SQL, включая язык триггеров и хранимых процедур, PSQL. Некоторые доступны только в PSQL, большинство - только в диалекте 3 базы данных. В табл. 8.1 представлены контекстные переменные Firebird.
Таблица 8.1. Список контекстных переменных
| Контекстная переменная |
Тип данных |
Описание |
Доступность |
| CURRENT_CONNECTION |
INTEGER |
Системный идентификатор соединения, при котором выполняется настоящий запрос |
Firebird 1.5 и выше, DSQL и PSQL |
| CURRENT_DATE |
DATE |
Текущая дата по часам на сервере |
Firebird 1.0 и выше, все окружения SQL |
| CURRENT_ROLE |
VARCHAR (31) |
Имя роли, под которым соединился текущий пользователь. Возвращает пустую строку, если текущее соединение не использовало роль |
Firebird 1.0 и выше, все окружения SQL |
| CURRENT_TIME |
TIME |
Текущее время по часам на сервере, выраженное в секундах после полуночи |
Firebird 1.0 и выше, все окружения SQL |
| CURRENT_TIMESTAMP |
TIMESTAMP |
Текущая дата и время по часам на сервере в секундах |
Firebird 1.0 и выше, все окружения SQL |
| CURRENT_TRANSACTION |
INTEGER |
Системный идентификатор транзакции, в контексте которой выполняется текущий запрос |
Firebird 1.5 и выше, DSQL и PSQL |
| CURRENTUSER |
VARCHAR( 128) |
Имя пользователя, который связан сданным экземпляром клиентской библиотеки |
Firebird 1.0 и выше, все окружения SQL |
| ROW_COONT |
INTEGER |
Счетчик строк измененных, удаленных и добавленных оператором DML после завершения операции |
Firebird 1.5 и выше, DSQL и PSQL |
| UPDATING |
BOOLEAN |
Возвращает true, если выполняется оператор изменения |
Firebird 1.5 и выше, только диалект триггера PSQL |
| INSERTING |
BOOLEAN |
Возвращает true, если выполняется оператор добавления |
Firebird 1.5 и выше, только диалект триггера PSQL |
| DELETING |
BOOLEAN |
Возвращает true, если выполняется оператор удаления |
Firebird 1.5 и выше, только диалект триггера PSQL |
| SQLCODE |
INTEGER |
Возвращает SQLCODE из блока исключения WHEN. Использование см. в главе 32 |
Firebird 1.5 и выше, только язык процедур PSQL |
| GDSCODE |
INTEGER |
Возвращает GDSCODE из блока исключения WHEN. Использование см. в главе 32 |
Firebird 1.5 и выше, только язык процедур PSQL |
| USER |
VARCHAR(128) |
Имя пользователя, который связан сданным экземпляром клиентской библиотеки |
Предшественники InterBase, все версии Firebird, все окружения SQL, доступные в диалекте 1 |
CURRENT_CONNECTION и CURRENT_TRANSACTION не имеют смысла вне текущего соединения и контекста транзакции соответственно. Сервер Firebird сохранит самые последние значения этих идентификаторов в заголовочной странице базы данных. После восстановления базы данных из резервной копии эти значения будут заново установлены в ноль.
CURRENT_TIMESTAMP записывает время сервера на момент старта операции. Для всех записей, вставляемых или обновляемых одним оператором, значение этой переменной будет одним и тем же.
Хотя CURRENT_TIME хранится на сервере как время после полуночи, ее тип TIME, а не интервал времени. Для получения интервала времени используйте TIMESTAMP при старте и завершении и вычтите время старта из времени завершения. Результатом будет интервал времени в днях.
Читать дальше