如何不收到此警告?DB2 警告 SQLSTATE=02000 未找到 FETCH、UPDATE 或 DELETE 的行;或者查询结果为空表

How to not get this warning? DB2 Warning SQLSTATE=02000 No row was found for FETCH, UPDATE, or DELETE; or the result of a query is an empty table

提问人:AdamTheD 提问时间:5/3/2022 最后编辑:schlebeAdamTheD 更新时间:11/17/2023 访问量:1287

问:

我们设置错误的方式是,当它发生时,此警告将向所有人发送一封电子邮件(我无法更改这一点)。我真的不在乎没有为这项工作找到行。

我该怎么做

A) 在绑定删除之前检查是否存在一行,或者

B) 以某种方式规避/忽略此警告?

删除示例:

 delete from schema.table 
   where key is null;

SQLSTATE=02000 No row显示 FETCH、UPDATE 或 DELETE 错误;或者查询结果为空表。

我也无法插入要删除的虚拟记录。

SQL DB2 警告

评论


答:

0赞 nfgl 5/3/2022 #1

也许这样就可以了

with delete_rows as (
  select * from old table (delete from schema.table where key is null)
)
select count(*) from delete_rows

评论

0赞 AdamTheD 5/4/2022
这就是最终为我工作的原因......可能不适合所有人,因为我们的系统有点时髦,但它接近您的答案。从 Schema.Table 中删除 where exists(select 1 from schema.table where key is null)
0赞 nfgl 5/4/2022
@AdamTheD Sure ?,如果存在 key 为 null 的行,则删除表中的每一行delete from schema.table where exists(select 1 from schema.table where key is null)
0赞 AdamTheD 5/11/2022
实际的解决方案是忽略返回代码,我将使用 0,因为 idr 实际代码,if[[$rtn_cd -ne 0]];然后 echo “delete failed” 退出 $rtn_cd fi
0赞 Mark Barinstein 5/4/2022 #2

您可以尝试使用复合 SQL(编译)语句“吃掉”此警告。

BEGIN
  DECLARE CONTINUE HANDLER FOR NOT FOUND
  BEGIN END;
  DELETE ...;
END