可以在select 之前加一个判断,如果没有记录就不执行了! 也可以通过异常处理来进行! begin select card_id into ls_cardid from info where idcard = ls_idcard; exception when others then null; end;
begin .... excption when sqlcode=01403 then end;
是不是这样改写呀? select card_id into ls_cardid from info where idcard = ls_idcard 进行查到记录的操作 excption when sqlcode=01403 then 进行未查到记录的操作 end if
我通常都是先这样处理的: select card_id into :iCount from info where idcard = ls_idcard; if iCount =0 then /*存在这个ID的记录*/ els /*不存在*/ end if;
给你一个,不过效率可能慢select count(*) ,max(card_id) into v_count, ls_cardid from info where idcard = ls_idcard;这样就避免了no_date_found的异常,不过你的idcard要唯一阿
to BoningSword: 我主要想一步到位,因为取出的card_id放到变量ls_cardid中,以后还要派用处的,如果先取count(*),然后再取card_id的值,就要对表进行两次检索了,效率会不会慢呀?
我主要是查查看有没有,如果有,就将card_id的值放入err表中的相应字段,如果没有,就将card_id的值放入success表中的相应字段,现在这样可以吗? select card_id into ls_cardid from info where idcard = ls_idcard insert into success(card_id) values (ls_cardid); excption when sqlcode=01403 then insert into err(card_id) values(ls_cardid); end if;
可以用exception来捕捉异常 begin select card_id into ls_cardid from info where idcard = ls_idcard; exception when no_data_found then ..... end;
也可以通过异常处理来进行!
begin
select card_id into ls_cardid from info where idcard = ls_idcard;
exception
when others then
null;
end;
....
excption
when sqlcode=01403 then
end;
select card_id into ls_cardid from info where idcard = ls_idcard
进行查到记录的操作
excption
when sqlcode=01403 then
进行未查到记录的操作
end if
select card_id into :iCount from info where idcard = ls_idcard;
if iCount =0 then
/*存在这个ID的记录*/
els
/*不存在*/
end if;
我主要想一步到位,因为取出的card_id放到变量ls_cardid中,以后还要派用处的,如果先取count(*),然后再取card_id的值,就要对表进行两次检索了,效率会不会慢呀?
select card_id into ls_cardid from info where idcard = ls_idcard
insert into success(card_id) values (ls_cardid);
excption when sqlcode=01403 then
insert into err(card_id) values(ls_cardid);
end if;
begin
select card_id into ls_cardid from info where idcard = ls_idcard;
exception
when no_data_found then
.....
end;