2016-02-24 77 views
0

我需要關於邏輯的建議。有一個在應用程序更新查詢類似下面獲取有關SQL更新記錄的詳細信息

UPDATE TABLE 
    SET FLAG = CASE 
       WHEN FLAG = 'IP' THEN 'P' 
       WHEN FLAG = 'IH' THEN 'H' 
       WHEN FLAG = 'IM' THEN 'M' 
       END 
WHERE ADJUSTMENT_ID IN (SELECT Query) 

此更新是從Java函數返回void執行。

現在我還需要獲取更新記錄的詳細信息(表TABLE中有少量列),並返回LIST而不是void

由於性能原因,首先運行SELECT並更新循環中的記錄不是一個選項。記錄更新爲單個UPDATE語句,因爲它應該運行得更快。

對我來說,保持可比較的性能會有哪些選擇?我應該使用存儲過程嗎?

+0

無關,而是:如果'flag'包含比'IP','IH'或'IM'列將更新爲'null'任何其他值。如果where子句有可能選擇具有其他值的行,則應該在case語句 –

+0

中添加一個else標誌,謝謝。我錯過了提及這一點。這種情況出現在WHERE子句中,AND FLAG IN('IP','IH','IM')' –

回答

4
SELECT ... FROM FINAL TABLE (UPDATE ....) 

會完成這項工作。因爲它是一個單獨的SQL語句,所以性能將會很好。

又見 http://www.idug.org/p/bl/et/blogid=278&blogaid=422

+0

非常感謝,它在命令提示符下工作。在Java中,使用'PreparedStatement',我們使用'executeUpdate()'作爲'SQL UPDATE',而'SQL SELECT'我們使用'executeQuery()'以便在這裏使用哪一個?我想這應該是'executeQuery()',我不確定你是不是Java人。 –

+0

當我用'FINAL TABLE'執行'UPDATE'時'executeQuery()'適用於我 –

相關問題