Хелен Борри - Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ стр 30.

Шрифт
Фон

"Диалекты" SQL

Firebird поддерживает три "диалекта" SQL, которые не имеют другого практического назначения, кроме конвертирования баз данных из InterBase версий 5.x в Firebird. "Родной" диалект Firebird в настоящий момент известен как диалект 3. По умолчанию Firebird создает новую базу данных в этом родном диалекте. Если в вашем опыте в Firebird нет ни груза существующих предположений, ни созданных баз данных, которые вам нужно обновить для Firebird, вы можете без риска "следовать естеству" и игнорировать все последующие замечания и предупреждения относительно диалекта 1.

Если вы бывший пользователь InterBase или применяли устаревшие инструменты для преобразования данных из других СУБД в InterBase, то диалекты SQL будут для вас предметом обсуждения в нескольких отношениях.

Поскольку вы можете работать с этой книгой в том порядке, который вам подходит, то вопросы влияния диалекта 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_CONNECTIONINTEGERСистемный идентификатор соединения, при котором выполняется настоящий запросFirebird 1.5 и выше, DSQL и PSQL
CURRENT_DATEDATEТекущая дата по часам на сервереFirebird 1.0 и выше, все окружения SQL
CURRENT_ROLEVARCHAR (31)Имя роли, под которым соединился текущий пользователь. Возвращает пустую строку, если текущее соединение не использовало рольFirebird 1.0 и выше, все окружения SQL
CURRENT_TIMETIMEТекущее время по часам на сервере, выраженное в секундах после полуночиFirebird 1.0 и выше, все окружения SQL
CURRENT_TIMESTAMPTIMESTAMPТекущая дата и время по часам на сервере в секундахFirebird 1.0 и выше, все окружения SQL
CURRENT_TRANSACTIONINTEGERСистемный идентификатор транзакции, в контексте которой выполняется текущий запросFirebird 1.5 и выше, DSQL и PSQL
CURRENTUSERVARCHAR( 128)Имя пользователя, который связан сданным экземпляром клиентской библиотекиFirebird 1.0 и выше, все окружения SQL
ROW_COONTINTEGERСчетчик строк измененных, удаленных и добавленных оператором DML после завершения операцииFirebird 1.5 и выше, DSQL и PSQL
UPDATINGBOOLEANВозвращает true, если выполняется оператор измененияFirebird 1.5 и выше, только диалект триггера PSQL
INSERTINGBOOLEANВозвращает true, если выполняется оператор добавленияFirebird 1.5 и выше, только диалект триггера PSQL
DELETINGBOOLEANВозвращает true, если выполняется оператор удаленияFirebird 1.5 и выше, только диалект триггера PSQL
SQLCODEINTEGERВозвращает SQLCODE из блока исключения WHEN. Использование см. в главе 32Firebird 1.5 и выше, только язык процедур PSQL
GDSCODEINTEGERВозвращает GDSCODE из блока исключения WHEN. Использование см. в главе 32Firebird 1.5 и выше, только язык процедур PSQL
USERVARCHAR(128)Имя пользователя, который связан сданным экземпляром клиентской библиотекиПредшественники InterBase, все версии Firebird, все окружения SQL, доступные в диалекте 1

Временные значения

CURRENT_CONNECTION и CURRENT_TRANSACTION не имеют смысла вне текущего соединения и контекста транзакции соответственно. Сервер Firebird сохранит самые последние значения этих идентификаторов в заголовочной странице базы данных. После восстановления базы данных из резервной копии эти значения будут заново установлены в ноль.

CURRENT_TIMESTAMP записывает время сервера на момент старта операции. Для всех записей, вставляемых или обновляемых одним оператором, значение этой переменной будет одним и тем же.

Хотя CURRENT_TIME хранится на сервере как время после полуночи, ее тип TIME, а не интервал времени. Для получения интервала времени используйте TIMESTAMP при старте и завершении и вычтите время старта из времени завершения. Результатом будет интервал времени в днях.

Контекстные переменные даты/времени основаны на времени сервера, которое может отличаться от внутреннего времени на клиенте.

Примеры использования

Следующий оператор возвращает время сервера в момент, когда сервер обслуживает запрос клиента Firebird:

SELECT CURRENT_TIME AS TIME_FINISHED FROM RDB$DATABASE;

В следующем операторе добавления идентификатор текущей транзакции, текущие серверные дата и время, а также имя пользователя системы будут записаны в таблицу:

INSERT INTO TRANSACTIONLOG(TRANS_ID, USERNAME, DATESTAMP) VALUES (

CURRENT_TRANSACTION,

CURRENT_USER,

CURRENT_TIMESTAMP) ;

Предопределенные литералы даты

Литералы даты - заключенные в апострофы строки, которые Firebird SQL будет воспринимать как специальные даты. В диалекте 1 эти строки используются напрямую, в диалекте 3 они должны быть преобразованы в соответствующий тип. В табл. 8.2 показано использование дат в каждом диалекте.

Таблица 8.2. Список предопределенных литералов даты

Литерал датыПодставляемая датаТип данных, Диалект 1Тип данных, Диалект 3
'NOW'Текущая дата и времяDATE (эквивалентно TIMESTAMP в диалекте 3)TIMESTAMP
'TODAY'Текущая датаDATE с нулевым временемDATE (только дата)
'YESTERDAY'Текущая дата -1DATE c нулевым временемDATE
'TOMORROW'Текущая дата + 1DATE с нулевым временемDATE

! ! !

ПРИМЕЧАНИЕ. В диалекте 1 тип данных DATE эквивалентен типу данных TIMESTAMP в диалекте 3. В диалекте 3 тип данных DATE содержит только дату. В диалекте 1 нет эквивалентного типа.

. ! .

Примеры использования предопределенных литералов даты

В диалектах базы данных 1 и 3 литерал даты должен быть преобразован в тип данных TIMESTAMP:

SELECT CAST ('NOW' AS TIMESTAMP) AS TIME_FINISHED FROM RDB$DATABASE;

Следующий оператор UPDATE устанавливает значение столбца даты в серверную дату плюс один день в диалекте 1:

UPDATE TABLE_A

SET UPDATE_DATE = 'TOMORROW'

WHERE KEY_ID = 144;

Вот та же самая операция в диалекте 3 с преобразованием типа:

UPDATE TABLE_A

SET UPDATE_DATE = CAST('TOMORROW' AS DATE)

WHERE KEY_ID = 144;

Столбцы

Данные в таких реляционных системах баз данных, как Firebird, логически упорядочены в виде множества строк и столбцов. Столбец хранит один элемент данных с атрибутами, идентичными для всех строк в наборе. Определение столбца имеет два обязательных атрибута: идентификатор (или имя столбца) и тип данных. Другие атрибуты могут быть включены в определение столбца, например, CHARACTER SET и ограничения типа NOT NULL и UNIQUE.

Множества, определенные для хранения данных, называются таблицами. Структура строк таблицы определяется при объявлении идентификатора таблицы; эта структура является списком идентификаторов столбцов, их типов данных и других необходимых атрибутов.

Простой пример объявления таблицы:

CREATE TABLE SIMPLE

( COLUMN1 INTEGER,

COLUMN2 CHAR(3),

COLUMN3 DATE);

Полное описание объявления таблиц и столбцов см. в главе 16.

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке