异常no-data-found with select 1 from dual

时间:2011-10-12 11:11:33

标签: sql oracle exception oracle10g

当l_num等于2并且满足某个条件时,我正在尝试更新表。条件实际上没有定义id的单个记录。

因为我使用了双重选择1。问题是l-test始终返回0(意味着没有找到数据)。

欢迎任何帮助。

这是代码:

CASE l_num
    WHEN 2
    THEN
       BEGIN
          SELECT 1
            INTO l_test
            FROM DUAL
           WHERE NOT EXISTS (
                    SELECT 1
                      FROM table t1, table t2
                     WHERE t1.id = l_id
                       AND t1.status = 'D'
                       AND t1.code = t2.code);
       EXCEPTION
          WHEN NO_DATA_FOUND
          THEN
             l_test := 0;
       END;
                                                                                           DBMS_OUTPUT.put_line ('  l_test when pr l_num =2 :' || l_test);
       IF l_test = 1
       THEN
          UPDATE ....

感谢名单

1 个答案:

答案 0 :(得分:2)

难道你不能只计算表格中的匹配数量吗?

(另外,你应该真正开始使用ANSI SQL语法而不是旧的SQL-86)

      SELECT count(1)
        INTO l_test
        FROM table t1
       INNER JOIN table t2 USING (code)
       WHERE t1.id = l_id
         AND t1.status = 'D';

如果计数为零,那么就没有匹配的ID,如果它大于零则会出现匹配。

这也简化了您的代码,因为您不必检查NO_DATA_FOUND,因为计数将始终返回一个值(零或更多)。

希望它有所帮助...