Delphi 3 и создание приложений баз данных

         

Указание значений при помощи оператора SELECT


Второй формой оператора INSERT является

INSERT INTO <объект> [(столбец1 [, столбец2 ...])]

<оператор SELECT>

При этом значениями, которые присваиваются столбцам, являются значения, возвращаемые оператором SELECT. Порядок их назначения столбцам аналогичен предыдущей форме оператора INSERT: значение первого по порядку столбца результирующего набора данных оператора SELECT присваивается первому столбцу оператора INSERT, второй - второму и т.д. Следует обратить внимание на важную особенность: поскольку оператор SELECT в общем случае возвращает множество записей, то и оператор INSERT в данной форме приведет к добавлению в объект аналогичного количества новых записей.

Пример.

Пусть в БД определена таблица RASHOD_DATA, по составу и порядку следования полей аналогичная таблице RASHOD:

CREATE TABLE RASHOD_DATA(

N_RASH INTEGER NOT NULL,

DAT_RASH DATE NOT NULL,

KOLVO INTEGER NOT NULL,

TOVAR VARCHAR(20) NOT NULL COLLATE PXW_CYRL,

POKUP VARCHAR(20) COLLATE PXW_CYRL,

PRIMARY KEY(N_RASH)

);

Пусть в эту таблицу нужно ежедневно копировать все записи о расходах товара со склада за текущую дату. Представим, что эти сведения в дальнейшем ежедневно

переправляются в территориально удаленную бухгалтерию, к офису которой не успели подвести сетевые кабели (или вообще не собираются этого делать).

Тогда ежедневная выгрузка записей из таблицы RASHOD в таблицу RASHOD_DATA будет реализовываться таким оператором:

INSERT INTO RASHOD_DATA

SELECT * FROM RASHOD WHERE DAT_RASH = "20-JAN-1997"

Пусть перед выполнением данного оператора таблица RASHOD_DATA пуста. Тогда после выполнения указанного оператора она будет иметь следующее содержимое:

N_RASH

DAT_RASH

KOLVO

TOVAR

POKUP

8

20-JAN-1997

1000

Кока-кола

Адмирал, АО

7

20-JAN-1997

20

Кока-кола

<null>

6

20-JAN-1997

30

Сахар

Саяны, ИЧП



Содержание раздела