无法使用JdbcTemplate更改Oracle会话

问题描述 投票:0回答:1

我需要在Spring-Standalone应用程序中更改Oraclesession的NLS_NUMERIC_CHARACTERS。我正在使用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 Standart。

spring oracle spring-jdbc jdbctemplate oracle18c
1个回答
0
投票

DriverManagerDataSource数据源从每个getConnection调用返回一个新的Connection。

因此,DriverManagerDataSourceJdbcTemplate#execute(StatementCallback<T> action)JdbcTemplate#execute(StatementCallback<T> action)最终都会被调用,每次执行都会获得JdbcTemplate#execute(final String sql)

JdbcTemplate#queryForObject(String sql, Class<T> requiredType)语句更改sessionnewly created connection,因此仅适用于执行该语句的连接。所做的更改不会影响其他连接。

© www.soinside.com 2019 - 2024. All rights reserved.