Поскольку вы можете работать с этой книгой в том порядке, который вам подходит, то вопросы влияния диалекта 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 при старте и завершении и вычтите время старта из времени завершения. Результатом будет интервал времени в днях.
Читать дальше