4

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

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

preparedStatement.setString(1, "BINARY_CI");

preparedStatement.execute();

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

4

2 回答 2

4

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

该调用没有进行解析,在alter session此处使用绑定变量不会在性能方面为您带来任何好处。

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

于 2011-04-01T13:27:33.327 回答
1

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

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

使用硬编码文字形式或对照已知排序规则列表检查排序规则名称。

于 2011-04-01T13:42:20.373 回答