Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Шрифт:
WHERE START_DATE < CAST ('12/31/2003' AS DATE);
В выражениях, где смешиваются целые данные и числовые строки, в диалекте 1 строки неявно преобразуются в целое, если это возможно. В следующей операции:
3 + '1'
диалект 1 автоматически преобразует символ "1" в SMALLINT, в то время как диалект 3 вернет ошибку. Он требует явного преобразования типов:
3 + CAST('1' AS SMALLINT)
Оба диалекта вернут ошибку в следующем операторе, потому что Firebird не может преобразовать символ "а" в целое:
3 + 'а'
Явное
В тех случаях, когда Firebird не может выполнить неявное преобразование типов, вы должны выполнить явное преобразование типов посредством функции CAST. Используйте CAST для преобразования одного типа данных в другой в операторе SELECT обычно в предложении WHERE для сравнения различных типов данных. Синтаксис функции:
CAST (значение | NOLL AS тип данных)
Вы можете использовать CAST для сравнения столбцов с различными типами данных в той же таблице или из различных таблиц. Например, вы можете преобразовывать правильно сформированную строку в типы дата/время, а также во множество числовых типов. Подробную информацию о преобразованиях типов данных смотрите в остальных главах этой части.
Изменение определения столбцов и доменов
В обоих диалектах вы можете изменять тип данных доменов и столбцов в таблицах. Если вы выполняете миграцию базы данных из другой СУБД, это может быть полезным. Существуют некоторые ограничения при изменении типа данных.
* Firebird не допускает изменения типа данных столбца или домена, которое может привести к потере данных. Например, количество символов в столбце не может быть меньше наибольшего размера столбца.
* Преобразование числового типа данных в строковый требует минимального размера строкового типа, как показано в табл. 8.3.
Таблица 8.3. Минимальное количество символов для числовых преобразований
Тип данных | Минимальная длина символьного типа |
BIGINT | 19 (или 20 для чисел со знаком) |
DECIMAL | 20 |
DOUBLE | 22 |
FLOAT | 13 |
INTEGER | 10 (11 для чисел со знаком) |
NUMERIC | 20 (или 21 для чисел со знаком) |
SMALLINT | 6 |
Изменение типа данных столбца
Используйте предложение ALTER COLUMN В операторе ALTER TABLE, например:
ALTER TABLE table1 ALTER COLUMN field1 TYPE char(20);
Информацию об изменении столбцов таблицы см. в разд. "Изменение таблиц" главы 16.
Изменение типа данных домена
Используйте предложение TYPE В операторе ALTER DOMAIN для изменения типа данных домена, например,
ALTER DOMAIN MyDomain TYPE VARCHAR(40);
На рис. 8.1 показаны допустимые преобразования типов данных. Более подробную информацию об изменении атрибутов домена см. в главе 13.
Ключевые слова, используемые для спецификации типа данных
Ключевые
{SMALLINT | INTEGER | FLOAT | DOUBLE PRECISION} [<array_dim>]
| {DATE | TIME | TIMESTAMP} [<array_dim>]
| {DECIMAL INUMERIC} [ (precision [, scale])] [<array_dim>]
{ {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR} [(int)]
[<array_dim>] [CHARACTER SET charname]
| {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR}
[VARYING] [(int)] [<array_diin>]
BLOB [SUB_TYPE int | subtype_name ] [SEGMENT SIZE int]
[CHARACTER SET charname]
BLOB [(seglen [, subtype])]
Рис. 8.1. Допустимые преобразования данных с использованием операторов ALTER COLUMN и ALTER DOMAIN
Специальная тема миграции: диалекты SQL
Если вы бывшие пользователи InterBase или вы использовали устаревшие инструменты миграции для конвертирования других СУБД в InterBase, то диалекты SQL видимо будут влиять на некоторые аспекты новой жизни ваших баз данных и приложений при использовании сервера Firebird.
ODS и диалект
Структура данных на диске (On-Disk Structure, ODS) идентифицирует базу данных в отношении версии релиза сервера Firebird или InterBase, который создает и восстанавливает базу данных. ODS базы данных влияет на совместимость с версиями сер- вера. Файл, подходящий для обновления ODS, может быть создан резервным копированием базы данных (backup) с использованием утилиты gbak той версии, в которой была создана база данных. Утилита должна быть использована с переключателем -t[ransportable]. Когда файл резервной копии будет восстановлен с использованием gbak новой версии, восстановленная база данных будет иметь новую версию ODS. Такое невозможно выполнить для "понижения" ODS для любой базы данных.
Использование gbak подробно обсуждается в главе 38.
Обновление ODS не влияет на диалект SQL базы данных: база данных диалекта 1 останется базой данных диалекта 1.
Firebird 1.0.x имеет ODS, обозначаемый как ODS-10. Firebird 1.5 имеет ODS-10.1. Чтобы преобразовать базу данных ODS-10, созданную в Firebird 1.0.x в ODS-10.1, вам просто нужно сделать ее резервную копию и восстановить эту копию с использованием gbak из Firebird 1.5. По умолчанию серверы Firebird версий 1.0.3+ и 1.5 создают базы данных диалекта 3. Для проверки ваших баз данных см. разд. "Как определить диалект" далее в этой главе.
OpenSource InterBase версий 6.0.x имеют ODS-10. Тем не менее для обновления баз данных InterBase 6.0.x до любой версии Firebird рекомендуется использовать gbak из InterBase 6.0 с переключателем -t[ransportable]. Файл резервной копии должен быть затем восстановлен с использованием gbak соответствующей версии сервера Firebird.
Если база данных InterBase 6.0 была создана с установками по умолчанию, то, вероятно, она имеет диалект 1. См .разд. "Как определить диалект" далее в этой главе.