Подготовленные Java параметры оператора для запроса сеанса oracle alter - PullRequest
3 голосов
/ 01 апреля 2011

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

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

preparedStatement.setString(1, "BINARY_CI");

preparedStatement.execute();

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

Ответы [ 2 ]

4 голосов
/ 01 апреля 2011

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

При этом вызове alter session синтаксический анализ не выполняется, использование переменной связывания здесь не будетполучить что-нибудь с точки зрения производительности.

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

1 голос
/ 01 апреля 2011

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

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

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

...