我在插入if语句时遇到错误,即如果B列为NULL,我需要忽略特定行,因为有些数据是预期的&处理下一个其他记录
CREATE OR REPLACE PROCEDURE Sample(
A IN DATE,
B IN VARCHAR2,
C IN NUMBER,
D IN NUMBER)
IS
A1 DATE;
B1 VARCHAR2(10);
C1 NUMBER(28,12);
D1 NUMBER(28,12);
BEGIN
A1 := A;
B1 := B;
C1 := C;
D1 := D;
INSERT
INTO Sample1 VALUES
(
A1,
B1,
C1,
D1
);
END;
答案 0 :(得分:3)
如果B列为NULL,我需要忽略特定行 数据已被预期&处理下一个其他记录
您可以使用以下方式。检查B
是否为空,然后仅插入记录。
CREATE OR REPLACE PROCEDURE SAMPLE (
a IN DATE
,b IN VARCHAR2
,c IN NUMBER
,d IN NUMBER
)
IS
abc EXCEPTION;
PRAGMA EXCEPTION_INIT(abc,-20001);
BEGIN
IF b IS NOT NULL
THEN
INSERT INTO sample1
VALUES (a
,b
,c
,d
);
ELSE
Raise abc;
END IF;
commit;
Exception
---If you want to show some user defined error you can raise here.
WHEN abc then
dbms_output.put_line('Ora:'||sqlcode||', B is Null.');
When others then
dbms_output.put_line('Error');
END;
答案 1 :(得分:0)
当您说要“忽略特定行”时,您是否意味着对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
为空的行,则可能过于复杂,
和答案 2 :(得分:0)
我认为你可以使用更简单的insert子句(Yo甚至可以只使用insert而不是调用一个过程):
public string GetRowValue(int row)
{
string result;
if(!dictionary.TryGetValue(row, out result))
result = "";
return result;
}