我尝试执行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查询吗?
答案 0 :(得分:4)
绑定变量具有性能提升,因为查询解析/优化只执行一次,而不是每次执行。
在alter session
调用上没有解析,使用绑定变量在这里不会获得任何性能。
对于SQL注入,只需根据您支持的排序规则列表验证排序规则的名称。
答案 1 :(得分:1)
ALTER SESSION
不需要查询计划(构建速度很慢),因此必须快速执行,甚至没有准备。
如果您使用任何形式的连接池(并且您可能会这样做),则此语句需要更频繁地执行。
使用硬编码的文字表格或根据已知的排序规则检查排序规则名称。