存储过程老是出错?

杨友山
博客专家认证
2011-11-17 05:47:31

declare
cid number(20);
begin
select a.id into cid from b_table a where a.mac='911:34:34:34:GG:GG';
if cid >0
then
update 语句;
else
insert 语句;
end if;
commit;
exception
when others then
rollback;
end;


有一个问题,当where条件为真的时候,正确;但是当where条件为假,else就不会走,这是什么情况啊?
...全文
53 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
redlotus_lyn 2011-11-17
  • 打赏
  • 举报
回复
把declare去掉。
007-x 2011-11-17
  • 打赏
  • 举报
回复
当where条件找不到值的时候,就发生了NO_DATA_FOUND异常.直接rollback了.
解法:select 语句需要改成count计数方式
declare   
cid number(20);
begin
select count(a.id) into cid from b_table a where a.mac='911:34:34:34:GG:GG';
if cid >0
then
select a.id into cid from b_table a where a.mac='911:34:34:34:GG:GG';
update 语句;
else
insert 语句;
end if;
commit;
exception
when others then
rollback;
end;

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧