Oracle pl / sql Процедура обновления таблицы - обработка исключений

is - тестирование идентичности, == - проверка равенства. Это означает, что is - это способ проверить, являются ли две вещи одинаковыми вещами или просто эквивалентны.

Скажем, у вас есть простой объект person. Если он называется «Джек» и ему «23 года», он эквивалентен другому 23-летнему Джеку, но его не одному человеку.

class Person(object):
   def __init__(self, name, age):
       self.name = name
       self.age = age

   def __eq__(self, other):
       return self.name == other.name and self.age == other.age

jack1 = Person('Jack', 23)
jack2 = Person('Jack', 23)

jack1 == jack2 #True
jack1 is jack2 #False

Они того же возраста, не один и тот же экземпляр человека. Строка может быть эквивалентна другой, но это не тот же объект.

1
задан Goran Kutlaca 16 January 2019 в 13:50
поделиться

1 ответ

Из «Обработка ошибок PL / SQL» :

NO_DATA_FOUND

Инструкция SELECT INTO не возвращает строк или ваша программа ссылается на удаленный элемент во вложенной таблице или неинициализированный элемент в таблице index-by. Агрегатные функции SQL, такие как AVG и SUM, всегда возвращают значение или ноль. Таким образом, оператор SELECT INTO, который вызывает агрегатную функцию, никогда не вызывает NO_DATA_FOUND. Ожидается, что оператор FETCH в конечном итоге не будет возвращать никаких строк, поэтому, когда это происходит, исключение не возникает.

Вы не используете оператор, который вызвал бы исключение NO_DATA_FOUND.

Может быть, вы можете использовать SQL%ROWCOUNT. Из «Выполнение операций SQL из PL / SQL» :

Чтобы узнать, на сколько строк влияют операторы DML, вы можете проверить значение SQL%ROWCOUNT ...

CREATE OR REPLACE PROCEDURE UPD_JOB (p_job_id jobs.job_id%TYPE,
                                     p_jobnew jobs.job_title%TYPE)
IS
BEGIN
  UPDATE JOBS
         SET job_title = p_jobnew
         WHERE JOB_ID = p_job_id;

  IF SQL%ROWCOUNT = 0 THEN
    DBMS_OUTPUT.PUT_LINE('No rows have been updated');
  END IF;
END;
/
0
ответ дан sticky bit 16 January 2019 в 13:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: