现在有需要进行下面的检索处理:
  从一个表中检索数据,但是这个表可能不存在该条件的数据
处理1:
  Select Count(*) Into v_count
  From Table1
  Where A=a 
    and rownum = 1;
  IF v_count > 1 Then
    Select B Into v_b
    From Table1
    Where A=a;
  End IF;
处理2
   Begin
     Select  B Into v_b
     From Table1
     Where A=a;
   Exception
     When others Then
       null;
   End;问题1
  上述这两种处理,那种更好?
问题2
  在Oracle中顺便引发异常,会不会对系统有影响,影响大不?

解决方案 »

  1.   

    Begin...End的方式是不是会开启一个事物,如果是在循环中执行,会不会导致事物太多,或者别的问题,哪位高手指点一下。
      

  2.   

    Select Count(*) Into v_count
      From Table1
      Where A=a 
        and rownum = 1;
      IF v_count > 1 Then
        Select B Into v_b
        From Table1
        Where A=a;
    你的v_count只能为0,或者1,不可能大于1的呀。
      

  3.   

    建议这样:
        Select nvl(max(B),-1) Into v_b
        From Table1
        Where A=a;只是一次查询,又不会抛异常,还能解决如果有两条数据的问题
    空的时间返回-1,或自己确定值