Шрифт:
Интервал:
Закладка:
Как определять диалект
Вызовите окно командной строки и перейдите в каталог /bin, где находятся инструменты командной строки Firebird. Запустите утилиту isql. Соединитесь с вашей базой данных:
SQL> CONNECT '/opt/firebird/examples/employee.fdb'
CON> user 'SYSDBA' password 'icur2yy4m';
SQL>
Затем введите следующую команду ISQL:
SQL> SHOW SQL DIALECT;
Client SQL dialect is set to: 3 and database dialect is: 3
(Диалект SQL клиента установлен в: 3, диалект базы данных: 3)
Это хорошо. Если вы найдете несоответствие, это ничему не повредит, если вы не будете пытаться добавлять или изменять данные. Вы должны принять меры, чтобы гарантировать использование клиентом корректного диалекта.
Изменение диалекта клиента в isqlПредположим, что сейчас в isql вы хотите закрыть ваше соединение с текущей базой данных и соединиться с другой базой данных, о которой вы знаете, что она в диалекте 1. Вот что вы делаете:
SQL> COMMIT;
SQL> SET SQL DIALECT 1;
WARNING: client SQL dialect has been set to 1 when connecting to Database
SQL dialect 3 database.
(Предупреждение: SQL-диалект клиента установлен в 1 при соединении с базой данных с SQL-диалектом 3)
SQL>
Здесь все в порядке, потому что вы только собираетесь соединиться с базой данных диалекта 1:
SQL> CONNECT 'RSERVER:D:DATASAMPLElegacy.gdb'
CON> user 'SYSDBA' password 'icur2yy4m';
SQL> SHOW SQL DIALECT;
Client SQL dialect is set to: 1 and database dialect is: 1
(Диалект SQL клиента установлен в: 1, диалект базы данных: 1)
Множество свободно распространяемых и коммерческих инструментов администратора с графическим интерфейсом предоставляют возможность интерактивной установки диалекта клиента. Компоненты доступа к базе данных и драйверы имеют свойства или другие механизмы для передачи диалекта структуре соединения API.
Пора дальшеСледующие четыре главы подробно описывают типы данных, поддерживаемые для каждой из основных категорий данных: числа, дата/время, символы и BLOB. Глава 13, последняя глава в этой части, описывает реализацию доменов в Firebird для объединения типа данных с группой атрибутов в одно воспроизводимое определение.
ГЛАВА 9. Числовые типы данных.
Firebird поддерживает числовые типы данных с фиксированной точкой (точные числа) и с плавающей точкой (приблизительная точность). Десятичными типами с фиксированной точкой являются целые типы с нулевым масштабом SMALLINT, INTEGER и в диалекте 3 BIGINT, а также два почти одинаковых масштабируемых числовых типа: NUMERIC и DECIMAL. Два типа с плавающей точкой: FLOAT (низкая точность) и DOUBLE PRECISION[15].
Firebird не поддерживает беззнаковый целочисленный тип. В табл. 9.1 показаны диапазоны значений каждого числового типа в Firebird.
Таблица 9.1. Границы числовых типов Firebird
Числовой тип Минимум Максимум SMALLINT -32,768 32,767 INTEGER -2,147,483,648 2,147,483,647 BIGINT -2(^63^) 2(^63^) - 1 (Для мазохистов) -9223372036854775808 9223372036854775807 NUMERIC* Меняется Меняется DECIMAL* Меняется Меняется FLOATПоложительные 1.175 * 10(^38^) 3.402 * 10(^38^) Отрицательные -3.402 * 10(^38^)DOUBLE PRECISIONПоложительные 2.225 * 10(^308^) 1.797 * 10(^308^) Отрицательные -1.797 * 10(^308^)* Границы для типов NUMERIC и DECIMAL изменяются в зависимости от способа хранения и масштаба. Границы всегда будут соответствовать тому типу, в котором эти данные будут сохраняться[16].
Операции с числовыми типами
* Операции сравнения. Используйте стандартные операторы отношений (=, <, >, >=, <=, <> или !=)[17].
Возможны сравнения строк с использованием таких операторов SQL, как CONTAINING, STARTING WITH и LIKE. В данных операциях числа трактуются как строки. Более подробную информацию об этих операторах см. в главе 21.
* Арифметические операции. Могут быть использованы стандартные бинарные арифметические операторы (+, * и /).
* Операции преобразования. Firebird автоматически выполняет преобразования между числами с фиксированной точкой, с плавающей точкой и строковыми типами данных при выполнении операций над смешанными типами данных. Когда операция является сравнением или арифметической операцией, включающей числовые и нечисловые типы данных, то сначала данные преобразуются в числовой тип, а затем выполняется операция.
* Операции сортировки. По умолчанию запрос возвращает строки точно в том порядке, в котором находит их в таблице, т. е., скорее всего, неупорядоченные. Вы можете отсортировать строки по значениям целочисленных столбцов, используя предложение ORDER BY оператора SELECT В убывающем или возрастающем порядке. Если числа сохраняются как символьные типы, то порядок сортировки будет алфавитно-цифровым, а не числовым, например, 1 - 10 - 11 ... 19 - 2.
Целые типы
Все целые типы являются точными знаковыми числами с нулевым масштабом. Firebird поддерживает три вида разной точности целых типов данных:
* SMALLINT - является знаковым коротким целым с диапазоном от -32,768 до 32,767;
* INTEGER - является знаковым длинным целым с диапазоном от-2 147 483 648 до 2 147 483 647;
* BIGINT - является знаковым 64-битовым целым с диапазоном от 2(^63^) до 2(^63^) - 1. Недоступен в диалекте 1.
! ! !
ПРИМЕЧАНИЕ. В Firebird 1.0.x в диалекте 3 объявляйте 64-битовые целые как NUMERIC(18,0) или DECIMAL (18,0). Всегда допустимо использование этого синтаксиса для целых типов, при этом можно опускать второй аргумент (масштаб).
. ! .
Более подробную информацию о масштабе, точности и операциях, которые могут выполняться для чисел с фиксированной точкой, см. далее в разд. "Масштабируемые типы с фиксированной точкой".
Следующие два оператора создают домен и столбец, соответственно, с типами данных SMALLINT и INTEGER:
CREATE DOMAIN RGB_RED_VALUE AS SMALLINT;
/* */
CREATE TABLE STUDENT_ROLL (
STUDENT_ID INTEGER,
. . . );
Каждый из следующих операторов создает домен, который является 64-битовым целым:
CREATE DOMAIN IDENTITY BIGINT CHECK(VALUE >=0);
/* Firebird 1.5 и выше */
CREATE DOMAIN IDENTITY NUMERIC(18,0) CHECK(VALUE >=0);
SMALLINT
SMALLINT является 2-байтовым целым, предоставляющим компактное хранение для целых чисел с ограниченным диапазоном значений. Например, SMALLINT может быть подходящим для хранения значений цветов в форме RGB, как показано в предыдущем примере создания домена.
SMALLINT часто используется для определения булевых значений, обычно 0 = ложь, 1 = истина. Пример такого использования можно найти в разд. "Объявление булевых доменов" главы 13.
INTEGER
INTEGER является 4-байтовым целым. В диалекте 1 генераторы (см. разд. "Генераторы" этой главы) генерируют значения типа INTEGER. Вы можете хранить такие целые в столбцах BIGINT без преобразования.
BIGINT, NUMERIC(18,0)
Доступны только в диалекте 3. Это 8-байтовое целое, полезное для хранения целых чисел с очень маленькими и очень большими значениями. В диалекте 3 генерируются числа типа BIGINT (см. разд. "Генераторы").
Автоинкремент или тип IDENTITY
Firebird не поддерживает типы автоинкремента или IDENTITY, которые вы могли встретить в других системах управления базами данных. Что у него есть, так это средство числовых генераторов и возможность поддерживать независимые, именованные серии чисел BIGINT. Каждая серия известна как генератор. Техника их использования для реализации и поддержки первичных ключей и других автоматических инкрементных серий описана в главе 31.
Генераторы
Генераторы являются идеальным средством для создания значений автоинкрементных уникальных ключей или серий значений числового столбца, а также других серий. Генераторы в базе данных объявляются оператором CREATE, как и любой другой объект базы данных:
CREATE GENERATOR AGenerator;
Генераторам может быть присвоено любое начальное значение:
SET GENERATOR AGenerator ТО 1;
! ! !
ВНИМАНИЕ! Существуют строгие предупреждения по поводу переустановки значений генераторов, когда эти значения находятся в использовании - см. разд. "Предупреждения о переустановке значений генераторов" в этой главе.
. ! .
Получение следующего значенияДля получения следующего значения вызывайте функцию SQL GEN_ID(ИмяГенератора, n), где имягенератора - имя генератора, а n - целое (диалект 1) или NUMERIC(18,0) (диалект 3), определяющее значение шага. Запрос:
SELECT GEN_ID(AGenerator, 2) from RDB$DATABASE;
возвращает число, которое на 2 больше последнего сгенерированного числа, и устанавливает значение генератора в сгенерированное значение.
Текущее значение генератораСледующая строка:
SELECT GEN_ID(AGenerator, 0) from RDB$DATABASE;
возвращает текущее значение генератора без его увеличения[18].
PSQL, язык программирования Firebird, позволяет напрямую присваивать сгенерированное значение переменной:
- Delphi. Учимся на примерах - Сергей Парижский - Программирование
- Сделай видеоигру один и не свихнись - Слава Грис - Программирование / Руководства
- Психбольница в руках пациентов - Алан Купер - Программирование