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

Проблема наличия одной плохой строки

Проблема наличия одной плохой строкиПроблема наличия “одной плохой строки” при выполнении инструкции вставки с подзапросом довольно типична. Представьте себе ситуацию, в которой нужно вставить 10 тысяч строк по 20 столбцов в каждой, отобранных из множества таблиц, в некоторую другую таблицу. Всего одно значение в одной строке может вызвать срыв операции вставки только по той причине, что оно больше, чем допускается определением столбца. К примеру, если столбец таблицы назначения имеет тип NUMERIC(5), попытка вставить в него число, большее 99999, приведет к срыву всей операции INSERT, даже если до этого она без сбоев продолжалась в течение нескольких часов. Аналогичная проблема может произойти при попытке вставки значения, нарушающего действующие ограничения столбца. Значение NULL нельзя вставить в столбец с ограничением NOT NULL, дублирующиеся величины могут быть отвергнуты ограничениями уникальности или первичного ключа и т. д. К примеру, следующая инструкция не будет выполнена ввиду нарушения ограничения CHECK. Ограничение проверки столбца SALESMAN_STATUS_S определяет всего два допустимых значения: Y и N. Мы же пытаемся вставить символ A. Если его заменить на Y, инструкция будет выполнена Начиная с версии 10gR2 в СУБД Oracle введена функция протоколирования ошибок DML. Если в инструкцию insert, update, delete или merge вставить предложение log errors, при возникновении ошибок инструкция не будет прерываться, при этом сообщение о типе ошибки и строке, на которую она повлияла, будет заноситься с таблицу журнала ошибок. Содержимое таблицы журнала ошибок можно анализировать и позже исправлять обнаруженные ошибки. Однако до начала использования предложения error logging таблицу журнала нужно создать либо вручную, либо с помощью системного пакета dbms_errlog. К примеру, следующая инструкция создаст таблицу ошибок с именем prod_errlog для таблицы product На практике часто удается избежать проблем, связанных с невыполнением всей Совет инструкции DML из-за ошибки в одной строке, с помощью процедурных расширений SQL: Oracle PL/SQL, Microsoft SQL Server T-SQL и DB2 SQL PL. О процедурных расширениях SQL речь пойдет в главе 14.