исключение нет данных найдено с выбором 1 из двойного - PullRequest
1 голос
/ 12 октября 2011

Я пытаюсь обновить таблицу, когда l_num равен 2 и определенное условие выполнено.условие фактически не имеет единственной записи для определенного идентификатора.

, для этого я использовал select 1 from dual.проблема в том, что l-тест все время возвращает 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 Ответ

2 голосов
/ 13 октября 2011

Не могли бы вы просто посчитать количество совпадений в ваших таблицах?

(Кроме того, вам действительно следует начать использовать синтаксис 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';

Если счетчик равен нулю, соответствующих идентификаторов не было, а если он больше нуля, совпадения присутствуют.

Это также упрощает ваш код, так как вам не нужно проверять NO_DATA_FOUND, поскольку счетчик всегда будет возвращатьзначение (ноль или более).

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...