无法从数据库中删除...?
因此,我有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.参数的数据类型。