Oracle alter session查询的Java准备语句参数

And*_*sne 5 java oracle prepared-statement bind-variables

我尝试执行 oracle alter session 查询来更改语言设置,但失败并出现错误“ORA-01036:非法变量名称/编号”。

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

preparedStatement.setString(1, "BINARY_CI");

preparedStatement.execute();
Run Code Online (Sandbox Code Playgroud)

Oracle 不允许在 ddl 语句中绑定变量。由于绑定变量具有性能增益(在我的用例中,此更改会话查询将在 Web 应用程序中使用的每个连接上执行),并且它还可以防止应用程序遭受 SQL 注入,因此我想使用它们。如果没有绑定变量,是否还有其他优化方法来执行上述更改会话查询?

Mat*_*Mat 5

绑定变量可以提高性能,因为查询解析/优化仅执行一次,而不是每次执行时执行。

该调用没有进行解析alter session,这里使用绑定变量不会在性能方面获得任何好处。

对于 SQL 注入,只需根据您支持的排序规则列表验证排序规则的名称即可。