代码之家  ›  专栏  ›  技术社区  ›  Mike Stone

无法从数据库中删除…?

  •  1
  • Mike Stone  · 技术社区  · 16 年前

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

    在开发数据库中发生了一些我无法理解的变化,我不知道如何看到不同之处。

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

    delete from myschema.mytable where id = 555
    

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

    sql0100w找不到用于提取、更新或删除的行;或者查询结果为空表。SqLSTATE=02000

    但是,由于以下错误,开发数据库完全无法删除:

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

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

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

    7 回复  |  直到 16 年前
        1
  •  1
  •   kukudas    16 年前

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

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

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

    有什么帮助吗?

        2
  •  0
  •   w4ik    16 年前

    您可能在dev db上有一个打开的事务…这有时会在SQL Server上让我感到不安

        3
  •  0
  •   Leigh Caldwell    16 年前

    ID类型是否与555兼容?或者它被更改为非整数类型?

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

        4
  •  0
  •   kukudas    16 年前

    你能在你的问题上再加一点吗?这个错误听起来像是SQL语句分析器对您的语句非常困惑。你能在那张表上选择id=555的行吗?

    你可以试着在那个表上运行一个runstats和reorg表,这些表应该是用来整理不稳定的表的。

        5
  •  0
  •   Community CDub    8 年前

    @castaway

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

        6
  •  0
  •   Community CDub    8 年前

    @castaway

    实际上,我们只是解决了这个问题,事实上,这正是你所说的(同事也发现了完全相同的页面)。

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

    关于这个主题的另一篇文章:

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

    这表明这个问题是一个引用约束损坏,实际上,或者说无论如何,在DB2V9的一个较新版本中得到了修复(我们还没有使用这个版本)。

    谢谢你的帮助!

        7
  •  0
  •   Fuangwith S.    16 年前

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