无法从数据库中删除...?

时间:2020-03-05 18:50:22  来源:igfitidea点击:

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

我无法弄清开发数据库中发生的某些更改,并且我不知道如何看到不同之处。

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

delete from myschema.mytable where id = 555

我从单元测试数据库收到以下正常响应,指示未删除任何行:

SQL0100W  No row was found for FETCH, UPDATE or DELETE; or the result of a query is an empty table.  SQLSTATE=02000

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

DB21034E  The command was processed as an SQL statement because it was not a valid Command Line Processor command.  During SQL processing it returned: SQL0440N  No authorized routine named "=" of type "FUNCTION" having compatible arguments was found.  SQLSTATE=42884

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

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

解决方案

回答

我们可能在dev db上有一个打开的事务...有时使我在SQL Server上

回答

ID的类型与555兼容吗?还是已将其更改为非整数类型?

或者,是否会丢失555参数(例如,如果我们使用的是JDBC并且在执行查询之前,预处理语句未设置其参数)?

回答

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

我们可以尝试在该表上运行RUNSTATS和REORG TABLE,这些表应该可以整理出怪异的表。

回答

@抛弃

具有相同" where"条件的选择效果很好,只是不能删除。 runstats和reorg表都不会对问题产生任何影响。

回答

嗯,将伟大的预言应用于这个问题,我想到了:

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

似乎暗示另一个表具有指向有问题的表的外键,当删除另一个表上的FK时,删除应该再次起作用。 (大概我们也可以重新创建外键)

这有帮助吗?

回答

@抛弃

我们实际上只是解决了这个问题,而且确实就是我们所说的(一位同事也找到了完全相同的页面)。

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

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

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

这表明该问题是参考约束损坏,并且实际上已经或者据说已经在更高版本的db2 V9(我们尚未使用)中修复了该问题。

谢谢帮助!

回答

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