Подготовленные Java параметры оператора для запроса сеанса oracle alter

Я попытался выполнить запрос сеанса oracle alter для изменения языковых настроек, но он завершился неудачно с ошибкой "ORA-01036: недопустимое имя / номер переменной".

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

preparedStatement.setString(1, "BINARY_CI");

preparedStatement.execute();

Oracle не позволяет связывать переменные в выражениях ddl. Поскольку переменные связывания имеют выигрыш в производительности (в моем случае использования этот запрос на изменение сеанса будет выполняться при каждом подключении, используемом в веб-приложении), и это также предотвращает внедрение приложения SQL, я хотел их использовать. Если нет переменных связывания, есть ли другой оптимизированный способ выполнения вышеупомянутого запроса изменения сеанса?

2 ответа

Решение

Переменные связывания имеют выигрыш в производительности, потому что анализ / оптимизация запросов выполняется только один раз, а не при каждом выполнении.

Там нет никакого анализа, сделанного на этом alter session call, использование переменной bind здесь не принесет вам ничего с точки зрения производительности.

Что касается SQL-инъекции, просто проверьте имя сопоставления по списку поддерживаемых сопоставлений.

ALTER SESSION не требует плана запроса (который строится медленно), поэтому он должен быть быстро выполнен, даже не подготовлен.

Если вы используете какую-либо форму пула соединений (и вы, вероятно, делаете), этот оператор должен выполняться еще реже.

Используйте жестко закодированную буквенную форму или сравните имя сопоставления со списком известных сопоставлений.

Другие вопросы по тегам