民间, 在DB2 9.x中,如果存在特定行,则delete语句正常工作并提供成功的返回代码。但如果该行不存在,则返回非零
即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 :(得分:1)
您可以将该删除语句包装在存储过程中,并捕获内部的异常。存储过程执行将始终为0。
从命令行,您无能为力,因为该命令有警告。您还可以在调用db2 delete时执行后期处理,例如,创建 shell函数,并在引发sqlcode时更改错误代码。
答案 1 :(得分:0)
在被迫使用其他程序执行SQL代码时,这种情况并不罕见。
以下是一个坏主意,但如果您是该表的唯一用户,则可以使用。
如果具有插入特权,则可以插入一个虚拟行,然后在该命令后进行删除,该删除将包括该虚拟行。这样,删除操作总是至少获得一行:
insert into mytable (id) values (9999999);
delete from mytable
where date_of_job >= current date - 1 day or
id=9999999;