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

Инструкция INSERT советы и хитрости Oracle (продолжение)

FIRST

Платформа Oracle будет проверять предложения WHEN по порядку, и как только будет обнаружено первое выражение, возвращающее значение ИСТИНА, будет выполнено соответствующее предложение INTO, а все прочие предложения WHEN будут опущены. WHEN условие THEN стандартная инструкция INSERT

Указывается условие, и, если это условие оказывается истинным, будет выполнена операция вставки, указанная в предложении THEN. Условие проверяется для каждого столбца в результирующем наборе данных подзапроса. Можно использовать до 127 предложений WHEN.

ELSE стандартная инструкция INSERТ

Выполняется, если не оказывается истинных условий WHEN.

Платформа Oracle позволяет применять стандартные операции вставки, описанные в разделе, посвященном стандарту ANSI, такие, как INSERT…SELECT и INSERT… VALUES, но также имеется очень много вариаций.

При вставке в таблицы, которым присвоены последовательности, обязательно используйте функцию имя_последовательности.пехтл’а1, чтобы вставить в последовательность следующий логический номер. Например, предположим, что вы используете последовательность authors_seq для указания значения au_id при вставке значений в таблицу authors.

INSERT authors (au_id, au_lname, au_fname, contract) VALUES (authors_seq.nextval, ‘Rabbit’, ‘Jessica’, 1)

Извлекая значения для операции вставки, убедитесь, что между выражениями в предложении RETURNING и переменными в предложении INTO имеется совпадение один к одному. Выражения, возвращаемые данным предложением, не обязательно должны быть теми же, которые упоминаются в предложении VALUES. Например, следующая инструкция INSERТ помещает запись в таблицу sales, и при этом помещает в переменную связывания совершенно другое значение.

INSERT authors (au_id, au._lname, au_fname, contract) VALUES (‘111-11-1111’, ‘Rabbit’, ‘Jessica’, 1) RETURNING hire_date INTO :temp_hr_dt;

Обратите внимание, что предложение RETURNING возвращает значение hire_date, даже если hire_date не является одним из значений, перечисленных в предложении VALUES. (В данном примере разумно предположить, что в столбец hire_date было помещено значение по умолчанию.)

Ниже приводится пример многотабличной вставки в таблицу поиска, содержащую список всех утвержденных проектов (jobs) компании.

INSERT ALL

INTO jobs(job_id, job_desc, min_lvl, max_lvl)

VALUES(job_id, job_desc, min_lvl, max_lvl)

INTO jobs(job_id+1, job_desc, min_lvl, max_lvl)

VALUES(job_id, job_desc, min_lvl, max_lvl)

INTO jobs(job_id+2, jobjlesc, min_lvl, max_lvl)

VALUES(job_id, job_desc, min_lvl, max_lvl)

INTO jobs(job_id+3, job_desc, min_lvl, max_lvl)

VALUES(job_id, job_desc, min_lvl, max_lvl) SELECT job_identifier, job_title, base_pay, max_pay FROM

job_descriptions WHERE]ob_status=’Active’;

И также, чтобы конструкции могли быть еще более сложными, Oracle позволяет использовать условные многотабличные инструкции INSERT.

INSERT ALL

WHEN job_status=’Active’ INTO jobs

WHEN job_status=’Inactive’ INTO jobs_old

WHEN job._status=’Terminated’ INTO jobs_cancelled

ELSE INTO jobs SELECT job_identifier, job_title, base_pay, max_pay FROM job_descriptions;

Заметьте, что если бы вы пропускали в целевой таблице столбцы NOT NULL в приведенном выше примере, то вам было бы необходимо после каждого предложения INTO ставить предложение VALUES. В следующем примере показан такой синтаксис.

INSERT FIRST

WHEN job_status=’Active’ INTO jobs

VALUES(job_id, job_desc, min_lvl, max_lvl) WHEN job_status=’Inactive’ INTO joos_old

VALUES(job_id, job_desc, min_lvl, max_lvl) WHEN job_statuS=’Terminated’ INTO jobs_cancelied

VALUES(jcb_id, job_desc, min_lvl, max_lvl) WHEN job_status=’Terminated’ INTO jobs_outsourced

VALUES(job_id, job_desc, mm_lvl, max_lvi) ELSE INTO jobs

VALUES(job_id, job_.desc, min_lvl, max_Ivl) SELECT job_identi*ier, job_title, base_pay, max_pay FROM job_descriptions;

Обратите внимание, что в приведенном выше примере предложение FIRST также заставляет Oracle выполнить первое условие job status=’Terminated’ и вставить записи в таблицу jobscancelled, пропустив операцию вставки в таблицу jobs_outsourced.

Платформа Oracle позволяет вставлять данные в таблицу, раздел или представление (которые также называются «цель») при помощи обычных инструкций INSERT или инструкций INSERT режима прямой вставки (direct-path). При обычной вставке платформа Oracle обеспечивает ссылочную целостность и повторно использует свободное пространство таблицы-цели. При прямой вставке Oracle добавляет данные в конец таблицы-цели, не заполняя свободных пространств в других местах таблицы. При этом методе не используется буферный кеш и данные пишутся прямо в файлы, отсюда и термин «прямая вставка».

Вставка данных типа LOB и BFILE — дело довольно хитрое. Перед вставкой вы должны проинициализироватъ эти значения пустыми значениями (NULL). Также сложна вставка в столбец RAW. Если вы вставляете обычную строку в столбец RAW, то для всех будущих запросов к этому столбцу будет использоваться перебор всех записей таблицы.

Источник