if sqlcode<>0 then是判断SQL语句是否成功  0 成功 -1等就是出错,或是其他

解决方案 »

  1.   

    可以在select 之前加一个判断,如果没有记录就不执行了!
    也可以通过异常处理来进行!
      begin
       select card_id into ls_cardid from info where idcard = ls_idcard;
      exception 
      when others then 
       null; 
      end;
      

  2.   

    begin
    ....
    excption
      when sqlcode=01403 then
    end;
      

  3.   

    是不是这样改写呀?
    select card_id into ls_cardid from info where idcard = ls_idcard
    进行查到记录的操作
    excption
      when sqlcode=01403 then
        进行未查到记录的操作
        end if
      

  4.   

    我通常都是先这样处理的:
    select card_id into :iCount from info where idcard = ls_idcard;
    if iCount =0 then
      /*存在这个ID的记录*/
    els
     /*不存在*/
    end if;
      

  5.   

    给你一个,不过效率可能慢select count(*) ,max(card_id) into v_count, ls_cardid from info where idcard = ls_idcard;这样就避免了no_date_found的异常,不过你的idcard要唯一阿
      

  6.   

    to BoningSword:
    我主要想一步到位,因为取出的card_id放到变量ls_cardid中,以后还要派用处的,如果先取count(*),然后再取card_id的值,就要对表进行两次检索了,效率会不会慢呀?
      

  7.   

    我主要是查查看有没有,如果有,就将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;
      
      

  8.   

    可以用exception来捕捉异常
    begin
    select card_id into ls_cardid from info where idcard = ls_idcard;
    exception 
    when no_data_found then
    .....
    end;
      

  9.   

    我知道可以用exception来捕获了,可是正常时候的操作放在哪里呐?请看我在第9楼写的,那样写对吗?