ORA-01403:在ORACLE PL / SQL中找不到数据

时间:2016-05-11 13:50:21

标签: oracle plsql

我在第二行执行此PL / SQL时出现oracle错误:SELECT .... 但是为了上帝的缘故!我已经检查过是否存在空值

IF zocRole IS NOT NULL and devices.unit_id IS NOT NULL THEN                   
   SELECT unit_role_id INTO unitRoleId FROM T_UNIT_ROLE WHERE role_id = zocRole AND unit_id = devices.unit_id;
END IF;

2 个答案:

答案 0 :(得分:1)

如上所述,抛出此异常是因为隐式游标不返回任何行。如果返回多行,您也会收到异常。

您可以改为使用显式游标Oracle Documents这实际上只是一个命名的SQL语句(如果您愿意,可以在其中传递参数)。

然后打开游标,获取(每次获取将尝试检索一行)并关闭。然后,您可以检查fetch是否返回任何数据。编码需要稍长的时间,但看起来更干净。

我记得几年前关于隐式游标与显式游标的相对速度存在争议,但我很久没有听到有人谈论这个问题,所以我认为它们的表现相同

答案 1 :(得分:-2)

控制过程/函数plsql中执行的最佳方法是添加块:BEGIN / EXCEPTION。

IF zocRole IS NOT NULL AND devices.unit_id IS NOT NULL 
THEN
  BEGIN                 
     SELECT unit_role_id 
     INTO   unitRoleId 
     FROM   T_UNIT_ROLE 
     WHERE  role_id = zocRole 
     AND    unit_id = devices.unit_id
     ;
  EXCEPTION
    WHEN OTHERS
    THEN dbms_output.put_line(SQLCODE||'-'||SUBSTR(SQLERRM, 1, 200));
  END
  ;
END IF
;