Oracle SQL INSERT: могу ли я сообщить значение, которое вызывает исключение Oracle?

Я пишу свой первый скрипт PL/SQL.

В сценарии пакетной обработки, который я пишу, я вставляю данные из поля "комментария" таблицы A в столбец таблицы B, который имеет различные ограничения целостности (отсюда и проблемы с ORA-12899 - слишком длинное значение или ORA-02291 - значение не допускается).

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

Мне известно, что я мог бы процедурно перебирать данные таблицы A и, по сути, вызывать 1 INSERT за раз, сообщая о значении любых данных, которые вызвали исключение для этого вызова. Но, если возможно, я бы хотел придерживаться принципа "позволить SQL выполнять свою работу".

Есть ли способ отобразить данные из таблицы A, когда прямое SQL "INSERT INTO {Table B} SELECT FROM {Table A}" вызывает исключение?

Примечание. У меня нет разрешений DDL для базы данных, и я знаю, что не могу их получить; У меня есть только DML и запрос, как INSERT/UPDATE/SELECT. Таким образом, такие решения, как "создание таблицы журнала", к сожалению, исключены.

Обновление: вторая часть моего вопроса: читая Вопрос 1065829, я начинаю думать, что даже пропуск неправильных вставок и переход с допустимыми вставками невозможны с прямым SQL и без доступа DDL (который, как я предполагал, будет возможно, прежде чем писать мой вопрос выше). Похоже, мне придется выбирать между итерацией строк таблицы А, выполнением одного вызова INSERT за раз и запросом специальных разрешений DDL. Это правильно?

Спасибо!

0 ответов

Другие вопросы по тегам