所以,我有 2 个数据库实例,一个用于一般开发,另一个是从开发中复制的用于单元测试。

开发数据库中发生了一些我无法弄清楚的变化,而且我不知道如何查看不同之处。

当我尝试从特定表中删除时,例如:

delete from myschema.mytable where id = 555

我从单元测试数据库得到以下正常响应,表明没有行被删除:

SQL0100W 找不到用于 FETCH、UPDATE 或 DELETE 的行;或者查询的结果是一个空表。SQLSTATE = 02000

但是,开发数据库根本无法删除,并出现以下错误:

DB21034E 该命令被作为 SQL 语句处理,因为它不是有效的命令行处理器命令。在 SQL 处理过程中,它返回:SQL0440N 找不到具有兼容参数的名为“=”、类型为“FUNCTION”的授权例程。SQL状态=42884

我最好的猜测是添加或更改了一些触发器或视图导致了问题,但我不知道如何找到问题......有谁遇到过这个问题或者知道如何找出问题的根源是什么?

(注意这是一个DB2数据库)

有帮助吗?

解决方案

嗯,应用伟大的神谕来解决这个问题,我想出了:

http://bytes.com/forum/thread830774.html

这似乎表明另一个表有一个外键指向有问题的表,当另一个表上的外键被删除时,删除应该再次起作用。(想必您也可以重新创建外键)

这有帮助吗?

其他提示

你可能在开发数据库上有一个开放的事务...这有时会让我在 SQL Server 上

id的类型与555兼容吗?或者改成非整数类型了?

或者,555 参数是否以某种方式丢失(例如如果您使用 JDBC 并且准备好的语句在执行查询之前未设置其参数)?

您可以为您的问题添加更多内容吗?该错误听起来像是 sql 语句解析器对您的语句非常困惑。您可以在该表上选择 id = 555 的行吗?

您可以尝试在该表上运行 RUNSTATS 和 REORG TABLE,这些应该可以整理出不稳定的表。

@抛弃

具有相同“where”条件的选择工作正常,只是不能删除。runstats 和 reorg table 都对这个问题没有任何影响。

@抛弃

我们实际上刚刚解决了问题,确实正如您所说(一位同事也发现了完全相同的页面)。

解决方案是删除外键约束并重新添加它们。

关于该主题的另一篇文章:

http://www.ibm.com/developerworks/forums/thread.jspa?threadID=208277&tstart=-1

这表明该问题是引用约束损坏,并且实际上或无论如何应该在 db2 V9 的更高版本(我们尚未使用)中修复。

谢谢您的帮助!

请检查1。你的触发器、过程、函数等参数。2.参数的数据类型。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top