Читаем Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ полностью

* выражением. Например, SET REVIEW_DATE = REVIEW_DATE + 14 изменяет значение столбца даты на две недели позже, чем текущее значение. Подробнее о выражениях см. главу 21;

* контекстной переменной сервера (например, SET DATE_CHANGED = CURRENT_DATE). Контекстные переменные описаны в главе 8;

* символом-заменителем параметра, соответствующим синтаксису, реализованному в коде приложения (например, для Delphi SET LAST_NAME = :LAST_NAME ИЛИ, для других интерфейсов приложений, SET LAST_NAME = ?);

* вызовом определенной пользователем функции (UDF). Например, SET BCOLUMN = OPPER(ACOLUMN) использует внутреннюю SQL-функцию UPPER для преобразования значения столбца ACOLUMN в верхний регистр и сохранения результата в BCOLUMN. Информацию об использовании функций см. в главе 21.

Предложение COLLATE может быть включено при модификации символьных столбцов (но не BLOB). для большинства наборов символов может оказаться необходимым использование одного из предыдущих примеров, поскольку последовательность сортировки по умолчанию (двоичная) обычно не поддерживает функцию UPPER(). Например, если ACOLUMN и BCOLUMN описаны с набором символов ISO8859_1 и используют испанский язык, то предложение SET должно быть следующим:

SET BCOLUMN = UPPER (ACOLUMN) COLLATION ES_ES

Подробнее о наборах символах и последовательностях сортировки см. главу 11.

Переключение значений

Будьте осторожны при "переключении" значений между столбцами. Выражение типа

. . .

SET COLUMNA = COLUMNB

приведет к тому, что текущее значение в столбце COLUMNA будет немедленно заменено текущим значением столбца COLUMNB. Если затем вы сделаете

SET COLUMNB = COLUMNA

то, поскольку старое значение столбца COLUMNA было потеряно, значения столбцов COLUMNB и COLUMNA останутся теми же, что и после первого переключения.

Для переключения значений вам нужен третий столбец, в котором будет "парковаться" значение из COLUMNA, пока вы не будете готовы назначить его столбцу

COLUMNB:

. . .

SET

COLUMNC = COLUMNA,

COLUMNA = COLUMNB, COLUMNB = COLUMNC

. . .

В SET вы можете использовать выражения, следовательно, при переключении двух целых значений возможно использование арифметических операций над двумя значениями. Предположим, что COLUMNA равняется 10, a COLUMNB 9:

. . .

SET

COLUMNB = COLUMNB + COLUMNA, /* COLUMNB теперь 19 */

COLUMNA = COLUMNB - COLUMNA, /* COLUMNA теперь 9 */

COLUMNB = COLUMNB - COLUMNA /* COLUMNB теперь 10 */

. . .

Всегда проверяйте ваши предположения при выполнении переключений!

Изменение столбцов BLOB

Изменение столбцов BLOB фактически полностью заменяет старое значение BLOB на новое. Старый указатель BLOB ID при изменении заменяется. Также:

* невозможно изменить BLOB путем конкатенации другого BLOB или строки с существующим BLOB;

* значение текстового BLOB может быть установлено с использованием строки в качестве ввода. Например, MEMO в следующем примере является текстовым BLOB:

UPDATE ATABLE

SET MEMO = 'Friends, Romans, countrymen, lend me your ears: I come not to bury Caesar, but to praise him.';

! ! !

ВНИМАНИЕ! Помните, что хотя столбцы BLOB не ограничены по размерам, строковые типы ограничены 32 765 байтами (VARCHAR) или 32 767 байтами (CHAR) - это байты, а не символы. Учтите это при конкатенации многобайтовых наборов символов.

. ! .

Изменение столбцов массивов

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

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

Значение по умолчанию для столбцов

Ограничения DEFAULT никогда не учитываются при выполнении операторов UPDATE.

<p>Оператор DELETE</p>

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

DELETE FROM имя-таблицы

[WHERE <предикаты-поиска>

| WHERE CURRENT OF имя-курсора]

Если не указано предложение WHERE, то будут удалены все строки таблицы.

<p>Оператор EXECUTE</p>

Оператор EXECUTE доступен только в ESQL. Он используется в приложениях со встроенным SQL для выполнения подготовленного динамического оператора SQL. В этом его отличие от обычных операторов DML в ESQL, которые являются предварительно скомпилированными и поэтому не подготавливаются во время выполнения.

! ! !

ПРИМЕЧАНИЕ. Не путайте оператор EXECUTE с синтаксисом оператора EXECUTE STATEMENT, который поставляется в расширениях PSQL в Firebird 1.5 и выше и с оператором EXECUTE PROCEDURE В DSQL (описывается далее в разд. "Выполняемые процедуры").

. ! .

<p>Запросы, которые вызывают хранимые процедуры</p>
Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных