Учебно-практическое пособие москва 2017 ббк


командой INSERT с общим табличным выражением



Pdf көрінісі
бет161/243
Дата21.07.2022
өлшемі3,05 Mb.
#147663
түріУчебно-практическое пособие
1   ...   157   158   159   160   161   162   163   164   ...   243
Байланысты:
Язык SQL. Базовый курс

командой INSERT с общим табличным выражением
.
Вообще, при классическом подходе для ведения учета изменений, внесенных в таб-
лицы, используют триггеры или правила (rules), но их рассмотрение выходит за рам-
ки настоящего пособия. Поэтому наш пример нужно рассматривать как иллюстрацию
возможностей общих табличных выражений (CTE), а не как единственно верный под-
ход.
WITH add_row AS
( INSERT INTO aircrafts_tmp
SELECT * FROM aircrafts
RETURNING *
)
INSERT INTO aircrafts_log
SELECT add_row.aircraft_code, add_row.model, add_row.range,
CURRENT_TIMESTAMP, 'INSERT'
FROM add_row;
INSERT 0 9
Давайте рассмотрим эту команду более подробно. Обратите внимание, что вся «по-
лезная» работа выполняется в рамках конструкции WITH add_row AS (...). Здесь строки
166


с помощью команды SELECT выбираются из таблицы aircrafts и вставляются в табли-
цу aircrafts_tmp. При вставке строк, выбранных из одной таблицы, в другую табли-
цу необходимо, чтобы число атрибутов и их типы данных во вставляемых строках
были согласованы с числом столбцов и их типами данных в целевой таблице. За-
вершается конструкция WITH add_row AS (...) предложением RETURNING *, которое
просто возвращает внешнему запросу все строки, успешно добавленные в таблицу
aircrafts_tmp. Конечно же, при этом из таблицы aircrafts_tmp добавленные строки ни-
куда не исчезают. Запрос получает имя add_row, на которое может ссылаться внешний
запрос, когда он «хочет» обратиться к строкам, возвращенным с помощью предложе-
ния RETURNING *.
Теперь обратимся к внешнему запросу. В нем также присутствует команда INSERT,
которая получает данные для ввода в таблицу aircrafts_log от запроса SELECT. А
этот запрос, в свою очередь, получает данные от временной таблицы add_row, ука-
занной в предложении FROM. Поскольку в предложении RETURNING мы указали в
качестве возвращаемого значения «*», то будут возвращены все столбцы таблицы
aircrafts_tmp, т. е. той таблицы, в которую строки были
вставлены
. Следовательно,
в команде SELECT внешнего запроса можно ссылаться на имена этих столбцов:


Достарыңызбен бөлісу:
1   ...   157   158   159   160   161   162   163   164   ...   243




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет