Ошибка оператора DB2, когда строка отсутствует
Народ, в DB2 9.x оператор delete работает нормально и выдает успешный код возврата, если присутствует конкретная строка. Но если строка отсутствует, она возвращает ненулевое значение
т.е. скажем, EmployeeTable не содержит employeeID 1234db2 "delete from EmployeeTable where employeeID = 1234"
Это дает вывод, как показано ниже.
SQL0100W No row was found for FETCH, UPDATE or DELETE; or the result of a query is an empty table. SQLSTATE=02000
Можно ли в любом случае вернуть код возврата "успех / ноль", если строк нет?
1 ответ
Вы можете заключить этот оператор удаления в хранимую процедуру и перехватить исключение внутри. Выполнение хранимой процедуры всегда выдает 0.
Из командной строки вы ничего не можете сделать, потому что у команды есть предупреждение. Вы также можете выполнить постобработку при вызове удаления db2, например, создать функцию оболочки и изменить код ошибки, если этот sqlcode был вызван.
Этот сценарий не редкость, когда вы вынуждены использовать другую программу для выполнения вашего кода SQL.
Следующее - плохая идея, но сработает, если вы единственный пользователь таблицы.
Если у вас есть права на вставку, вы можете вставить фиктивную строку и после этой команды выполнить удаление, которое будет включать фиктивную строку. Таким образом, при удалении всегда будет хотя бы одна строка:
insert into mytable (id) values (9999999);
delete from mytable
where date_of_job >= current date - 1 day or
id=9999999;