Когда вы говорите, что вы хотите «игнорировать конкретную строку» вы имеете в виду какой-либо вызов процедуры, где b
является нулевым? Если это так, просто проверить его с if
условием:
create or replace procedure demo
(a in date
, b in varchar2
, c in number
, d in number)
as
begin
if b is null then
your_logging_package.msg('Ignored insert request for a='||a||', b=null, c='||c||', d='||d);
else
insert into sample1 (col_a, col_b, col_c, col_d)
values (a, b, c, d);
end if;
end demo;
Или еще (так как обработка исключений было упомянуто), вы могли бы попытаться вставки независимо, а затем обработать исключение, если это не удается:
create or replace procedure demo
(a in date
, b in varchar2
, c in number
, d in number)
as
mandatory_value_missing exception;
pragma exception_init(mandatory_value_missing, -1400);
begin
insert into sample1 (col_a, col_b, col_c, col_d)
values (a, b, c, d);
exception
when mandatory_value_missing then
if sqlerrm like '%"SAMPLE1"."COL_B"%' then
your_logging_package.msg('Ignored insert request for a='||a||', b='||b||', c='||c||', d='||d);
end if;
end demo;
Однако ,
- это, вероятно, слишком сложно, если вы уже знаете, что вы хотите, чтобы пропустить строки, где
b
равно нулю, и
- вы должны проверить текст сообщения об ошибке, чтобы убедиться, что он применим только к столбцу B, если это ваше рабочее правило, так что это становится немного грязным. (Имейте в виду, что сообщение об ошибке может не отображаться на английском языке в зависимости от языковых настроек вызывающего абонента.)
Вам не нужно назначать A-A1 и т. Д. Просто используйте A. Также посмотрите на обработку исключений в PL/SQL с предложением WHEN. –
Какая ошибка вы получаете? – GurV
Можете ли вы рассказать, как использовать обработку исключений в этом случае? – Ragav