我想更新一个表,但是我想检查记录是否存在。如果不是,则抛出异常。在C#应用程序中,我通过以下命令传递参数并执行命令。
procedure usp_update_example
(
p_id in mydb.member.idn_member%type,
p_idn_person in mydb.member.idn_person%type,
p_ind_rep in mydb.member.ind_rep%type
)
as
v_exist pls_integer := 0;
v_step varchar2(250);
v_exception_not_exist exception;
begin
v_step := 'Check for record ' || p_id;
select count(1)
into v_exist
from mydb.member
where idn_member = p_id;
if v_exist = 0 then
raise v_exception_not_exist;
end if;
if (v_exist > 0) then
v_step := 'Update table :' || p_id;
update mydb.member
set
idn_person = p_idn_person,
ind_rep = p_ind_rep
where idn_member = p_id;
end if;
exception
when v_exception_not_exist then
Raise_application_error(-20001, 'Not exist');
end usp_update_example;
但是即使我的情况正确,我的表中也确实存在该记录。我总是遇到Not exist
异常。如果我不使用if v_exist = 0
并使用WHEN NO_DATA_FOUND THEN
。那一切都很好。
我不确定哪里错了。
答案 0 :(得分:1)
您的代码似乎没问题。看起来此问题与某些未提交的数据有关-您在插入了该记录的会话中看到了该记录,而在C#会话中却看不到该记录,因为该记录尚未提交。因此,C#会话会生成异常。
我建议重新编写程序代码是为了使其更紧凑。 类似于以下内容:
...
begin
update mydb.member
set idn_person = p_idn_person,
ind_rep = p_ind_rep
where idn_member = p_id;
if SQL%ROWCOUNT = 0 then
raise_application_error(-20001,'Not exist');
end if;
end;