2011-06-14 73 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

相關問題