Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Новое на сайте
Топовые новости
Новое

Инструкция INSERT советы и хитрости Oracle


Введение

Реализация инструкции INSERT Oracle позволяет вставлять данные в указанную таблицу, представление, раздел, подраздел или объектную таблицу. Также поддерживаются дополнительные расширения, такие, как вставка записей сразу в несколько таблиц и вставка по условию. Синтаксис следующий.

Стандартная инструкция INSERT

INSERT [INTO] {имя_таблицы [[SUBPARTITION (имя_раздела)] |
(подзапрос) [WITH {READ ONLY j CHECK OPTION
[CONSTRAINT имя_ограничения]}] |
TABLE (коллекция) [(+)]} [псевдоним)
[(столбец! [, …])] {VALUES (значение! [, …]) [RETURNING выражение! […]
INTO переменная! [, …]] |
SELECT_statement [WITH {READ ONLY |
CHECK OPTION [CONSTRAINT имя_ограничения]}}

Условная инструкция

INSERT INSERT {[ALL | FIRST]}
WHEN условие THEN стандартная инструкция
INSERT ELSE стандартная_инструкция

Где:


INSERT [INTO]

Одна или несколько строк вставляются в одну таблицу, представление, материализованное представление или подзапрос. Ключевое слово INTO является необязательным. Вы можете вставить одну строку, используя предложение VALUES, или несколько строк, используя подзапрос, имя_таблицы

[[SUB]PARTITION (имя_раздела)]

Указывается, куда будут вставляться данные. Это может быть таблица, представление, материализованное представление или подзапрос. Для точного указания цели параметр имя_таблицы можно превратить в [схема.]имяраблицы[@связьр_базойДанных]. При желании вы можете указывать схему и удаленный адрес [@связьр_базойДанных] цели. Если же вы их не укажете, будет подразумеваться текущая схема и локальная база данных. При желании вы можете при помощи параметра имя_раздела указать раздел (PARTITION) или подраздел (SUBPARTITION), в который будут вставляться данные, если только не используется объектная таблица или объектное представление. подзапрос [WITH {READ ONLY CHECK OPTION [CONSTRAINT имя ограничения]}] Oracle будет вставлять записи в базовую таблицу или таблицы подзапроса, где подзапрос — это инструкция SELECT с обычной структурой. По сути, при помощи подзапроса вы создаете представление «на ходу» и эффект будет тот же самый, как и при вставке в представление. Это основной способ вставки значений в несколько таблиц одновременно. Все столбцы, определяемые в подзапросе, во всех его таблицах, должны иметь соответствующее значение для вставки, в противном случае возникнет ошибка. Многотабличная вставка должна иметь форму подзапроса. При применении подзапросов можно использовать следующие параметры.

WITH READ ONLY

Показывает, что таблицу, к которой обращается подзапрос, нельзя обновлять до его завершения.

WITH CHECK OPTION [CONSTRAINT имя ограничения]

Показывает, что в таблицу или представление нельзя вставлять строки, не удовлетворяющие проверочному (CHECK) ограничению имя ограничения.

TABLE (коллекция) [(+)]} [псевдоним]

Платформа Oracle должна обрабатывать коллекцию как обычную цель (то есть как таблицу или представление) независимо оттого, представляет ли она собой подзапрос, столбец, функцию или конструктор коллекций. В любом случае табличная коллекция должна возвращать вложенную таблицу или набор значений VARRAY. Поскольку конструкции могут быть очень длинными, вы можете дополнительно указывать псевдонимы. Псевдонимы нельзя использовать при многотабличной вставке.

[(столбец! [, …])]

Указываются столбцы, в которые будут вставляться данные. Если вы не укажете столбцы, Oracle будет предполагать, что предложение VALUES или столбцы, возвращаемые подзапросом, в точности соответствуют столбцам целевой таблицы. Если вы не укажете значения для столбца, определенного как NOT NULL и не имеющего значения по умолчанию, то возникнет ошибка. VALUES (значение! [, …]) [RETURNING выражение! [, …] INTO переменная! [,]] Значения вставляются в целевую таблицу или представление. Как и в стандарте ANSI, для каждого столбца должно быть указано соответствующее значение, хотя в качестве значения можно указывать DEFAULT или, если столбец принимает пустые значения, можно указать литеральный NULL. Ключевое слово DEFAULT нельзя использовать при вставке в представления. При многотабличной вставке предложение VALUES должно возвращать соответствующее значение для каждого элемента, выбираемого подзапросом. Синтаксис следующий.

RETURNING выражение!

Извлекаются строки, которые вставляет данная операция. Выражение, возвращаемое инструкцией, часто представляет собой вставляемое значение, но это может быть и другое значение. Например, предложение RETURNING можно использовать для поиска значения автоматически генерируемого первичного ключа. Операции, работающие с одной строкой, сохраняют результаты в хост-переменных или переменных PL/SQL, а операции, работающие с множеством строк, сохраняют их в массивах связывания (bind array). Предложение RETURNING можно использовать в таблицах, представлениях, основанных на одной таблице, и материализованных представлениях. Предложение RETURNING нельзя использовать при многотабличной вставке.

INTO переменная!

Указываются переменные, в которых будут храниться значения, возвращаемые предложением RETURNING. Вы должны объявить соответствующую хост-переменную или переменную PL/SQL для каждого выражения в предложении RETURNING. Нельзя использовать предложение INTO для сохранения данных типа LONG, для объектов удаленных баз данных, для представлений с триггерами INSTEAD OF или для параллельновыполняемых инструкций INSERT, UPDATE или DELETE.

ALL

Выполняется многотабличная операция вставки. Предложение ALL применяется только с подзапросами. Если не указано предложение WHEN, все данные, возвращаемые подзапросом, без всяких условий вставляются в указанные таблицы. При использовании предложения ALL с предложением WHEN выполняются условные операции вставки, и все предложения WHEN проверяются независимо от результатов других операций WHEN. Если условие WHEN возвращает значение ИСТИНА, Oracle выполняет соответствующее предложение INTO. Многотабличную вставку нельзя сделать параллельной в индекс-таблицах или таблицах с индексом на основе битовых карт. Такая вставка вообще не разрешена в следующих ситуациях.

  • Целью является представление или материализованное представление.
  • Целью является таблица на удаленном сервере.
  • В инструкции INSERТ используется выражение, в котором содержится коллекция таблиц.
  • В таблице требуется произвести вставку более чем в 999 столбцов.
  • В подзапросе используется последовательность.

Источник