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
Они того же возраста, не один и тот же экземпляр человека. Строка может быть эквивалентна другой, но это не тот же объект.
Из «Обработка ошибок PL / SQL» :
NO_DATA_FOUND
Инструкция SELECT INTO не возвращает строк или ваша программа ссылается на удаленный элемент во вложенной таблице или неинициализированный элемент в таблице index-by. Агрегатные функции SQL, такие как AVG и SUM, всегда возвращают значение или ноль. Таким образом, оператор SELECT INTO, который вызывает агрегатную функцию, никогда не вызывает NO_DATA_FOUND. Ожидается, что оператор FETCH в конечном итоге не будет возвращать никаких строк, поэтому, когда это происходит, исключение не возникает.
blockquote>Вы не используете оператор, который вызвал бы исключение
NO_DATA_FOUND
.Может быть, вы можете использовать
SQL%ROWCOUNT
. Из «Выполнение операций SQL из PL / SQL» :Чтобы узнать, на сколько строк влияют операторы DML, вы можете проверить значение
blockquote>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; /