當你說你想「忽略特定行」你的意思是哪裏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,如果這是您的業務規則,所以這有點混亂。 (請注意,錯誤信息可能不是英文,具體取決於調用者的語言設置。)
您不需要將A1分配給A1等。只需使用A.還可以看看PL/SQL中的異常處理,以及WHEN子句。 –
你有什麼錯誤? – GurV
請問在這種情況下如何使用異常處理? – Ragav