Чтение онлайн

на главную - закладки

Жанры

Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ

Борри Хелен

Шрифт:

SELECT COUNT (DISTINCT TABLE.COLX) +

(SELECT COUNT(*) FROM RDB$DATABASE

WHERE EXISTS(SELECT * FROM TABLE T

WHERE T.COLX IS NULL))

FROM TABLE

Оператор INSERT

Оператор INSERT используется для добавления строк в одну таблицу. SQL не позволяет в одном операторе INSERT добавлять строки более чем в одну таблицу.

При некоторых условиях оператор INSERT может работать с просмотрами. Обсуждение просмотров, для которых

можно применять добавление данных в лежащие в основе просмотра таблицы, см. в главе 24.

Оператор INSERT имеет две основные формы передачи значений в список входных столбцов.

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

INSERT INTO имя-таблицы | имя-просмотра (<список столбцов>)

VALUES (<соответствующей список значений>)

Следующая форма используется для добавления из встроенного запроса:

INSERT INTO <таблица> (<список столбцов>)

SELECT [[FIRST m] [SKIP n]] <соответствующий список значений из другого набора>

[ORDER BY <встроенный столбец (столбцы)> [DESC]]

В следующем примере предложение INSERT INTO определяет входной набор для таблицы TABLEB, а предложение SELECT определяет соответствующий встроенный запрос к таблице TABLEA для получения значений для входного набора:

INSERT INTO TABLEB(COLA, COLB, COLC)

SELECT COL1, COL2, COL3 FROM TABLEA;

! ! !

ПРИМЕЧАНИЕ. He существует возможности добавлять данные во встроенный запрос.

. ! .

Добавление данных в столбцы BLOB

Техника INSERT INTO ... SELECT напрямую передает столбец BLOB В столбец BLOB. Как правило, если вам нужно добавить столбец BLOB как часть списка VALUES, он должен конструироваться клиентским приложением с использованием функций и структур API. В приложениях DSQL такие данные обычно передаются в виде потоков (stream). Размер сегмента может быть проигнорирован везде, кроме приложений ESQL.

При этом если вы передаете в VALUES данные для BLOB В виде текста, Firebird примет символьную строку в качестве ввода, например:

INSERT INTO ATABLE (BLOBMEMO)

VALUES ('Now is the time for all good men to come to the aid of the party');

Эта возможность будет подходящей при условии, что сохраняемый текст никогда не превысит 32 767 байтов (или 32 765, если вы помещаете поле VARCHAR в BLOB). Может показаться, что для многих интерфейсов программирования подобная проблема не существует, потому что они не могут обрабатывать такие большие строки. Однако, поскольку Firebird принимает выражения конкатенации строк SQL, такие как MYVARCHARI 11 MYVARCHAR2, следует принять меры по защите входных строк

от переполнения.

Добавление в столбцы массивов

В приложениях со встроенным SQL (ESQL) возможно конструирование оператора SQL для добавления целого массива в столбец массива. Могут появиться ошибки, если данные не полностью заполняют массив.

В DSQL вовсе нет возможности добавлять данные в столбцы массивов. Необходимо реализовывать пользовательский метод в приложении или в коде компонента, который будет вызывать API-функцию isc_array_put_siice.

Использование INSERT для автоматических полей

Определение таблицы может содержать столбцы, чьи значения автоматически заполняются данными при добавлении новой строки. Это может происходить в нескольких случаях:

* столбец определен с предложением COMPUTED BY;

* столбец или домен, на котором он основан, включает предложение DEFAULT;

* для таблицы был создан триггер BEFORE INSERT для автоматического заполнения столбца.

Автоматические поля могут воздействовать на тот способ, каким вы формулируете операторы INSERT для таблицы.

Столбцы COMPUTED BY

Включение вычисляемого столбца в список входных столбцов является неверным и приводит к исключениям, как показано в следующем примере:

CREATE TABLE EMPLOYEE (

EMP_NO INTEGER NOT NULL PRIMARY KEY,

FIRST_NAME VARCHAR (15),

LAST_NAME VARCHAR(20),

BIRTH_COUNTRY VARCHAR(30) DEFAULT 'TAIWAN',

FULL_NAME COMPUTED BY FIRST_NAME || ' ' || LAST_NAME);

COMMIT;

INSERT INTO EMPLOYEE (EMP_NO, FIRST_NAME, LAST_NAME, FULL_NAME)

VALUES (99, 'Jiminy', 'Cricket', 'Jiminy Cricket');

Столбцы, имеющие значение no умолчанию

Если столбец определен со значением по умолчанию, то это значение будет работать только при добавлении и только если этот столбец отсутствует в списке входных столбцов. Если немного изменить оператор добавления в предыдущем примере, то в столбец BIRTH_COUNTRY будет записано значение 'TAIWAN':

INSERT INTO EMPLOYEE (EMP_NO, FIRST_NAME, LAST_NAME)

VALUES (99, 'Jiminy', 'Cricket');

COMMIT;

SELECT * FROM EMPLOYEE WHERE EMP_NO = 99;

EMP_NO FIRST_NAME LAST_NAME BIRTH_COUNTRY FULL_NAME

99 Jiminy Cricket TAIWAN Jiminy Cricket

Значения по умолчанию никогда не заменяют значений NULL:

INSERT INTO EMPLOYEE (EMP_NO, FIRST_NAME, LAST_NAME, BI RTH_COUNTRY)

VALUES (100, 'Maria', 'Callas', NULL);

COMMIT;

SELECT * FROM EMPLOYEE WHERE EMP_NO = 100;

Поделиться:
Популярные книги

Флеш Рояль

Тоцка Тала
Детективы:
триллеры
7.11
рейтинг книги
Флеш Рояль

Паладин из прошлого тысячелетия

Еслер Андрей
1. Соприкосновение миров
Фантастика:
боевая фантастика
попаданцы
6.25
рейтинг книги
Паладин из прошлого тысячелетия

Ученик

Первухин Андрей Евгеньевич
1. Ученик
Фантастика:
фэнтези
6.20
рейтинг книги
Ученик

Бастард Императора. Том 4

Орлов Андрей Юрьевич
4. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Бастард Императора. Том 4

Эволюционер из трущоб. Том 5

Панарин Антон
5. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 5

Вперед в прошлое 10

Ратманов Денис
10. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 10

Волхв пятого разряда

Дроздов Анатолий Федорович
2. Ледащий
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Волхв пятого разряда

Кодекс Крови. Книга Х

Борзых М.
10. РОС: Кодекс Крови
Фантастика:
фэнтези
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга Х

Осознание. Пятый пояс

Игнатов Михаил Павлович
14. Путь
Фантастика:
героическая фантастика
5.00
рейтинг книги
Осознание. Пятый пояс

Леди Малиновой пустоши

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Леди Малиновой пустоши

Измена. Не прощу

Леманн Анастасия
1. Измены
Любовные романы:
современные любовные романы
4.00
рейтинг книги
Измена. Не прощу

Господин следователь 6

Шалашов Евгений Васильевич
6. Господин следователь
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Господин следователь 6

Тепла хватит на всех

Котов Сергей
1. Миры Пентакля
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Тепла хватит на всех

Отмороженный 4.0

Гарцевич Евгений Александрович
4. Отмороженный
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Отмороженный 4.0