【问题标题】:exception no-data-found with select 1 from dual异常 no-data-found 与 select 1 from dual
【发布时间】:2011-12-06 01:14:38
【问题描述】:

当 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 ....

感谢

【问题讨论】:

    标签: sql oracle exception oracle10g


    【解决方案1】:

    您不能只计算表中的匹配数吗?

    (另外,你应该真正开始使用 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,因为计数将始终返回一个值(零或更多)。

    希望对你有帮助...

    【讨论】:

    • 我将 count(1) 更改为 count(*),并添加 rownum
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多