Java为oracle alter session查询准备了语句参数

时间:2011-04-01 13:21:36

标签: 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();

Oracle不允许在ddl语句中绑定变量。由于绑定变量具有性能提升(在我的用例中,此alter session查询将在Web应用程序中使用的每个连接上执行),并且它还会阻止应用程序从SQL注入我想使用它们。如果没有绑定变量,还有其他任何优化的方法来执行上面的alter session查询吗?

2 个答案:

答案 0 :(得分:4)

绑定变量具有性能提升,因为查询解析/优化只执行一次,而不是每次执行。

alter session调用上没有解析,使用绑定变量在这里不会获得任何性能。

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

答案 1 :(得分:1)

ALTER SESSION不需要查询计划(构建速度很慢),因此必须快速执行,甚至没有准备。

如果您使用任何形式的连接池(并且您可能会这样做),则此语句需要更频繁地执行。

使用硬编码的文字表格或根据已知的排序规则检查排序规则名称。