2011-06-14 78 views
0
UPDATE trans_actual SET comment_id = ? 
WHERE id = (SELECT MAX(id) 
      FROM trans_actual 
      WHERE plan_id = ?) 

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback;不良的SQL语法 的SQLException:ORA-02049: 超时:分布式事务 等待锁有人能告诉我什么是错与此查询

其在SQLDeveleloper工作的罚款。

+0

听起来像问题不在于查询本身,而在于它正在运行的上下文 - “等待锁定”在这里可能非常重要。 – 2011-06-14 16:21:16

+0

工作正常SQLDevloper但在PHP炸弹?我更喜欢使用sprintf()函数将变量传递给SQL字符串。可以从PHP发送INT作为字符串用于MYSQL。如果INT被视为字符串而不是INT,则查询将失败。 '$ sqlString = sprintf(“SELECT * FROM example WHERE id =%d”,$ varInt);' – 2011-06-14 16:22:36

+0

http://forums.devshed.com/mysql-help-4/select-max-id-from-table- where-id-id-2608.html这可能会有所帮助 – 2011-06-14 16:24:14

回答

1

查询看起来很好。它看起来像一个交易锁定问题。在这类问题中,只有您可以确定锁的位置,因为您无法在此处发布整个代码。

此外,您可能有其他应用程序访问同一个数据库。你必须检查事务隔离级别,并发性,整个九码。您是否搜索过ORA-02049?它应该给你一些提示。

+0

我认为查询本身锁定它我不知道为什么.....因为它的本地服务器和其他人无法访问它。 – 2011-06-14 16:39:58

+0

显而易见的问题是......如果你在SQL Developer中运行了整个语句,包括更新,你是否在尝试在PHP中重新运行它之前将它回滚? – 2011-06-14 16:54:09

+0

是否有可能“trans_actual”是通过dblink指向另一个实例的同义词?尝试:select * from all_synonyms where db_link is not null; – tbone 2011-06-14 16:54:49

相关问题