Невозможно изменить Oracle сеанс с JdbcTemplate - PullRequest
0 голосов
/ 23 января 2020

Мне нужно изменить NLS_NUMERIC_CHARACTERS моей Oraclesession в моем приложении Spring-Standalone. Я использую JdbcTemplates:

logger.info("Setting NLS-Parameter.");
jdbcTemplate.execute("alter session set NLS_NUMERIC_CHARACTERS='.,'");
logger.info(jdbcTemplate.queryForObject("select value from nls_session_parameters where parameter = 'NLS_NUMERIC_CHARACTERS'", String.class));

Но это не меняется:

Setting NLS-Parameter.
,.

Я инициализирую JdbcTemplate программно:

DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(ORACLE_JDBC_DRIVER);
dataSource.setUrl(url);
dataSource.setUsername(schema);
dataSource.setPassword(password);
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource);

Все остальные операторы работают прекрасно. Просто изменение сеанса не работает. База данных Oracle 18 Стандарт.

1 Ответ

0 голосов
/ 23 января 2020

Источник данных DriverManagerDataSource возвращает новое соединение из каждого вызова getConnection.

Таким образом, JdbcTemplate#execute(StatementCallback<T> action), что JdbcTemplate#execute(final String sql) и JdbcTemplate#queryForObject(String sql, Class<T> requiredType) в конечном итоге оба вызова получат вновь созданное соединение для каждого выполнения.

Оператор alter session set NLS_NUMERIC_CHARACTERS='.,' изменяет NLS_NUMERIC_CHARACTERS для сеанса , поэтому только для соединения, которое выполняет инструкцию. Изменение не повлияет на другие соединения.

...