我尝试执行 oracle alter session 查询以更改语言设置,但失败并出现错误“ORA-01036:非法变量名称/编号”。
preparedStatement = connection.prepareStatement("ALTER SESSION SET NLS_SORT = ?");
preparedStatement.setString(1, "BINARY_CI");
preparedStatement.execute();
Oracle 不允许在ddl 语句中绑定(bind)变量。由于绑定(bind)变量具有性能增益(在我的用例中,此更改 session 查询将在 Web 应用程序中使用的每个连接上执行)并且它还可以防止应用程序进行 SQL 注入(inject),我想使用它们。如果不绑定(bind)变量,是否有任何其他优化方法来执行上述更改 session 查询?
最佳答案
绑定(bind)变量具有性能提升,因为查询解析/优化只进行一次,而不是在每次执行时进行。
alter session
调用没有进行任何解析,在这里使用绑定(bind)变量不会为您带来任何性能方面的好处。
对于 SQL 注入(inject),只需根据您支持的排序规则列表验证排序规则的名称。
关于oracle alter session查询的Java准备语句参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5513975/