1

我需要在 Spring-Standaloneapplication 中更改 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 标准。

4

1 回答 1

1

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

因此,JdbcTemplate#execute(StatementCallback<T> action)最终JdbcTemplate#execute(final String sql)都会JdbcTemplate#queryForObject(String sql, Class<T> requiredType)调用,每次执行都会获得一个创建的连接

sessionalter session set NLS_NUMERIC_CHARACTERS='.,'语句会发生变化NLS_NUMERIC_CHARACTERS,因此仅适用于执行该语句的连接。更改不会对其他连接产生影响。

于 2020-01-23T20:52:47.033 回答