2013-03-08 2 views
0

Люди, В DB2 9.x инструкция delete работает нормально и дает успешный код возврата, если присутствует конкретная строка. Но если строка не присутствует, она возвращает ненулевойОшибка удаления DB2 DB2 при отсутствии строки

т.е. Say EmployeeTable не содержит EmployeeID 1234 db2 "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 

В любом случае, чтобы вернуть код успеха/нулевого возврата, если нет строк?

+0

Что вы пытаетесь достичь? – bruno

+0

@Bruno: Нам был предоставлен внешний скрипт-оболочка для ввода SQL. Но скрипт-оболочка всегда проверяет, является ли код возврата SQL равным нулю. Следовательно, для обработки пустого сценария значений нам была добавлена ​​ошибка. – diaryfolio

ответ

1

Вы можете обернуть этот оператор delete в хранимую процедуру и поймать исключение внутри. Выполнение хранимой процедуры всегда будет выдаваться 0.

Из командной строки вы ничего не можете сделать, потому что команда имеет предупреждение. Вы также можете выполнить почтовый процесс при вызове удаления db2, например, создать функцию оболочки и изменить код ошибки, если этот sqlcode был поднят.

+0

спасибо @AngocA. Есть ли способ использовать декодирование или подобный вид для захвата состояния пустой строки? – diaryfolio

+0

Что-то вроде декодирования может быть выполнено в хранимой процедуре: create procedure p() begin declare dummy int; объявить обработчик продолжения для sqlstate '02000' set dummy = 1; удалить из таблицыX; конец@ – AngocA