Использование COALESCE против EXCEPTION, когда строки не возвращаются (Oracle) - PullRequest
0 голосов
/ 21 марта 2019

В настоящее время я сталкиваюсь с ошибкой, когда я получаю сообщение об ошибке «НЕТ НАЙДЕННЫХ ДАННЫХ», когда я запускаю хранимую процедуру, которая определяет / выбирает переменные, которые я настроил.

Я пробовал два разных метода. Один объединяет столбец и ноль (как показано ниже):

BEGIN
  BEGIN
      SELECT COALESCE (max_value, 0) AS MAX_VALUE
        INTO v_max_v
        FROM table1
       WHERE car_code = rcar;
      --
      SELECT COALESCE (min_value, 0) AS MIN_VALUE
        INTO v_in_v
        FROM table1
       WHERE car_code = rcar;
  END
END;

Другой метод - обработать исключение, при котором строки для каждой переменной не возвращаются.

BEGIN
  BEGIN
      SELECT max_value AS MAX_VALUE
        INTO v_max_v
        FROM table1
       WHERE car_code = rcar;
  EXCEPTION
     WHEN NO_DATA_FOUND
     THEN v_max_v := NULL;
  END
      --
      SELECT min_value AS MIN_VALUE
        INTO v_min_v
        FROM table1
       WHERE car_code = rcar;
  EXCEPTION
     WHEN NO_DATA_FOUND
     THEN v_min_v := NULL;
  END
END;

Какой метод является более эффективным / менее затратным? Есть ли объективный способ проверить себя? (объясните планы работают только на запросы, я верю)

Заранее спасибо.

1 Ответ

1 голос
/ 21 марта 2019

NO_DATA_FOUND не просто соответствует какому-либо значению как нулевому или нет.Это скорее тип исключения по умолчанию, используемый для уведомления / обработки, если записи существуют или нет.

Ваше сравнение недопустимо.Первый из них вообще не связан с каким-либо исключением: он просто проверяет и заменяет значение, если оно пустое, и не имеет отношения к каким-либо исключениям.Но в другом случае блок исключений есть, но он бесполезен, пока не возникнет ситуация, когда строк не существует, а не то, что значение данных или значение столбца равно нулю.

С точки зрения производительности, первый работает быстрее, хотя дополнительный код исключения не добавлен, но вы можете встраивать его также без разницы.

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