Вопрос неопределенный, и я предполагаю точную форму вашего сценария, поэтому мой ответ пытается предложить вам некоторые варианты, не будучи точным.
Вы можете попробовать что-то вроде этого:
WHENEVER SQLERROR EXIT FAILURE COMMIT
INSERT INTO t1 VALUES ( 'a', 'b', 'c');
INSERT INTO t1 VALUES ( 'a1', 'b1', 'c1');
.
.
Это приведет к остановке скрипта при первой ошибке, но с помощью команды COMMIT вы сможете увидеть, как далеко вы продвинулись (при условии, что в порядке вставки есть логический порядок).
Это быстрый и грязный способ отточить ошибки.
Второй способ - использовать переменные PROMPT, чтобы показать, какие значения вставляются для отладки:
WHENEVER SQLERROR EXIT FAILURE ROLLBACK
PROMPT INSERTING a, b, c
INSERT INTO t1 VALUES ( 'a', 'b', 'c');
PROMPT INSERTING a1, b1, c1
INSERT INTO t1 VALUES ( 'a1', 'b1', 'c1');
.
.
Еще одна идея, немного более сложная. Предполагая, что вы используете EXCEL для генерации операторов INSERT, вы можете сгенерировать их как вызовы процедуры pr_insert, а затем использовать логику в процедуре, чтобы перехватить и отметить ошибку:
CREATE OR REPLACE PROCEDURE pr_insert
( p1 IN t1.c1%TYPE,
p2 IN t1.c2%TYPE,
p3 IN t1.c3%TYPE ) AS
BEGIN
INSERT INTO t1 VALUES ( p1, p2, p3 );
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR ( -20001, 'Error on : ' || p1 || ',' || p2 || 'p3 );
END ;
/
В вашем Excel могут быть сгенерированы следующие вызовы pr_insert:
BEGIN
pr_insert ( 'a', 'b', 'c' );
pr_insert ( 'a1', 'b1', 'c1' );
pr_insert ( 'a2', 'b2', 'c2' );
.
.
END;
/