Хелен Борри - Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
- Название:Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2006
- Город:Санкт-Петербург
- ISBN:5-94157-609-9
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Хелен Борри - Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ краткое содержание
Рассмотрены вопросы, необходимые разработчику для создания клиент-серверных приложений с использованием СУБД Firebird, явившейся развитием СУБД Borland Interbase 6. Содержится обзор концепций и моделей архитектуры клиент/сервер, а также практические рекомендации по работе с клиентскими библиотеками Firebird. Детально описаны особенности типов данных SQL, язык манипулирования данными (Data Manipulation Language, DML), а также синтаксис и операторы языка определения данных ( Data Definition Language, DDL). Большое внимание уделено описанию транзакций и приведены советы по их использованию при разработке приложений. Описано программирование на стороне клиента и сервера написание триггеров и хранимых процедур, создание и использование событий базы данных, обработка ошибок в коде на сервере и многое другое. Материал сопровождается многочисленными примерами, советами и практическими рекомендациями.
Для разработчиков баз данных
Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Полное название месяца (не чувствительно к регистру)
01
JAN
January
02
FEB
February
03
MAR
March
04
APR
April
05
MAY
May
06
JUN
June
07
JUL
July
08
AUG
August
09
SEP
September
10
OCT
October
11
NOV
November
12
DEC
December
Примеры литералов даты
Двадцать пятое число (25) шестого месяца (июнь) 2004 года может быть представлено любым из следующих способов:
'25.6.2004' '06/25/2004' 'June 25, 2004'
'25.jun.2004' '6,25,2004' '25,jun,2004'
'25jun2004' '6-25-04' 'Jun 25 04'
'25 jun 2004' '2004 June 25' '20040625'
'25-jun-2004' '2004-jun-25' '20040625'
'25 JUN 04' '2004-06-25' '2004,25,06'
Предварительно определенные литералы даты
Firebird поддерживает группу "предопределенных" литералов дат - английские слова, заключенные в апострофы, которые Firebird выбирает или вычисляет и интерпретирует в контексте соответствующего типа даты/времени. Слова 'TODAY', 'NOW, 'YESTERDAY' и 'TOMORRROW интерпретируются, как показано в табл. 10.5.
Таблица 10.5. Предварительно определенные литералы даты
Литерал |
Тип диалекта 3 |
Тип диалекта 1 |
Значение |
'NOW' |
TIMESTAMP |
DATE |
Дата и время сервера, которые были текущими на момент старта операции DML. 'NOW' будет преобразовано и корректно сохранено в полях DATE, TIME и TIMESTAMP В диалекте 3 или в полях DATE в диалекте 1. Как и эквивалентная контекстная переменная CURRENT_TIMESTAMP, значение всегда сохраняется с долями секунды ' .0000' * |
' TODAY' |
DATE |
DATE хранится с временем равным '00:00:00' |
Дата и время сервера, которые были текущими на момент старта операции. Если в процессе операции миновала полночь, дата не изменяется. Эквивалентен контекстной переменной диалекта 3 CURRENT_DATE. Недопустим для полей типа TIME |
'TOMORRROW' |
DATE |
DATE хранится с временем равным '00:00:00' |
Дата и время сервера, которые были текущими на момент старта операции, плюс 1 день. Если в процессе операции миновала полночь, дата, из которой была вычислена дата 'TOMORRROW', не изменяется. Недопустим для полей типа TIME |
'YESTERDAY' |
DATE |
DATE хранится с временем равным '00:00:00' |
Дата и время сервера, которые были текущими на момент старта операции, минус 1 день. Если в процессе операции миновала полночь, дата, из которой была вычислена дата 'YESTERDAY', не изменяется. Недопустим для полей типа TIME |
* Тем не менее ничто не теряется. Вы можете получить дату и время сервера с десятитысячными долями секунды, используя UDF GetExactTimestamp (...) из библиотеки UDF Firebird. Более подробную информацию см. в приложении 1.
Неявное преобразование типов в литералах даты и времени
Когда литералы даты - неважно, обычные или предварительно определенные - используются в SQL в контексте с соответствующим типом даты/времени столбца или переменной, синтаксический анализатор SQL может корректно их интерпретировать без преобразования. При этом в небольшом количестве случаев, когда не существует типизированного значения, которому синтаксический анализатор мог бы присвоить литерал даты, он трактует любой литерал даты как строку.
Например, совершенно верным является затребовать, чтобы запрос SELECT вернул константу, которая не связана ни с каким столбцом в базе данных. Основное "хакерство" в Firebird- использование системной таблицы RDB$DATABASE в запросе, поскольку эта таблица имеет одну и только одну строку, и всегда можно получить скалярное значение: единственное контекстное значение от сервера. Следующие два примера иллюстрируют типичное использование этого приема:
SELECT 'NOW' FROM RDB$DATABASE;
Так как запрос возвращает константу, а не значение столбца, ее тип данных интерпретируется как CHAR(3), 'NOW'. Этот пример
SELECT '2.09.2004' FROM RDB$DATABASE;
вернет CHAR(9), '2.09.2004'.
Чтобы получить от синтаксического анализатора правильную интерпретацию литерала даты при условии, что анализатор не может определить тип данных, используйте функцию CAST():
* для диалекта 3:
SELECT CAST('NOW' AS TIMESTAMP) FROM RDB$DATABASE;
SELECT CAST('2.09.2004' AS TIMESTAMP) FROM RDB$DATABASE;
* для диалекта 1:
SELECT CAST('NOW' AS DATE) FROM RDB$DATABASE;
SELECT CAST('2.09.2004' AS DATE) FROM RDB$DATABASE;
Контекстные переменные даты и времени
Контекстные переменные даты и времени CURRENT_DATE, CURRENT_TIME и CURRENT_TIMESTAMP возвращают значение даты и времени, полученные с сервера на момент начала выполнения оператора SQL, содержащего контекстную переменную. Табл. 10.6 описывает эти переменные.
Таблица 10.6. Контекстные переменные даты и времени
Переменная |
Тип диалекта 3 |
Тип диалекта 1 |
Значение |
CORRENT_TIMESTAMP |
TIMESTAMP |
DATE |
Текущая дата и время, округленное до секунд. Дробная часть секунд всегда возвращается равной '.0000' |
CURRENT_DATE |
DATE |
Не поддерживается |
Текущая дата |
CURRENT_TIME |
TIME |
Не поддерживается |
Текущее время, выраженное в часах, минутах и секундах после полуночи. Дробная часть секунд всегда возвращается равной ' .0000' |
Операции, использующие значения даты и времени
Использование арифметических операций в манипулировании данными, в вычислениях и в отношениях между двумя датами были ранее рассмотрены в разд. "Интервал времени" этой главы. Возможность вычитания значения более ранней даты, времени или даты-времени из более поздней существует благодаря способу хранения типов дата и время в Firebird. Способ хранения использует одно или два 32-битовых целых для даты/времени, только для даты или только для времени дня. Данные, представленные в этих числах, являются днями в длинном слове даты и дробной частью дней в слове времени. Дата представлена количеством дней с "нулевой даты"- 17 ноября 1898 г [26] Вероятно, не будет ошибкой, если эта дата дает целое значение, называемое Измененным юлианским номером дня. Подробности см. на http://hermetic.nofadz.com/cal_stud/jdn.htm.
. Время представлено в десятитысячных долях секунд, прошедших с полуночи.
В диалекте 3 DATE хранит только дату. В диалекте 3 TIME хранит только время. TIMESTAMP и в диалекте 1 DATE хранят обе части.
С этими числовыми структурами можно довольно просто оперировать, используя несложные выражения сложения и вычитания для вычисления разницы во времени (интервал), увеличения или уменьшения дат, установления диапазонов даты или времени. В табл. 10.7 описываются доступные операции и получаемые результаты.
Таблица 10.7. Арифметические операции для типов данных даты и времени
Операнд 1 |
Оператор |
Операнд 2 |
Интервал:
Закладка: