2011-04-01 98 views
2

我嘗試執行oracle alter session查詢以更改語言設置,但失敗並顯示錯誤「ORA-01036:非法變量名稱/編號」。Java爲oracle alter session查詢準備的語句參數

preparedStatement = connection.prepareStatement("ALTER SESSION SET NLS_SORT = ?"); 

preparedStatement.setString(1, "BINARY_CI"); 

preparedStatement.execute(); 

Oracle不允許在ddl語句中綁定變量。由於綁定變量具有性能增益(在我的使用情況下,此更改會話查詢將在Web應用程序中使用的每個連接上執行),並且還會阻止應用程序從SQL注入,我想使用它們。如果沒有綁定變量,是否有任何其他優化的方式來執行上述改變會話查詢?

回答

3

綁定變量具有性能增益,因爲查詢分析/優化只進行一次,而不是每次執行。

這個alter session調用沒有解析,使用綁定變量在這裏不會爲您帶來任何性能方面的好處。

至於SQL注入,只需根據您支持的排序規則列表驗證排序規則的名稱。

1

ALTER SESSION不需要查詢計劃(建立起來很慢),因此即使沒有準備也必須快速執行。

如果你使用任何形式的連接池(你可能會這樣做),這個語句需要執行得更少。

使用硬編碼文字形式或根據已知歸類列表檢查歸類名稱。