declare
      v_Num  number;
Begin 
     select Nvl(Num)
       into v_Num
       from Student
      where  SNo='000001';
End;
即查询SNo为000001的Num值;
现在情况是:如果SNo为000001的记录不存在,这时如何将v_Num值赋为0?

解决方案 »

  1.   

    好像要分两步走吧:
    declare
         v_Num  number;
    Begin 
        select count(*) into v_num   into v_Num  from Student where  SNo='000001';
     
    if v_num=1 then 
    select nvl(Num,0) into v_Num from Student where  SNo='000001';
    else 
    v_num=0;
    end;
    End;好像解决的比较笨,后面高手接上
      

  2.   

    declare
          v_Num  number;
    Begin 
         select Num
           into v_Num
           from Student
          where  SNo='000001';
         EXCEPTION
    WHEN NO_DATA_FOUND THEN
    v_Num := 0;
    End;
      

  3.   

    最好分2步走,不要用Exception来控制流程,那样性能低下
      

  4.   

    自己刚想到的语句:
      select Decode(Count(*),1,Max(Num),NULL) 
           into v_Num
           from Student
          where  SNo='000001';
    要给分呀,我感觉这个最好的语句了呀。