我将 SQL 查询存储在资源文件中,格式非常人性化(带有换行符和缩进)。突然我遇到了一个问题:简单的查询(如下所示)无需通过 keyholder 获取生成的代码列值即可正常工作,
insert into
my_table
(
code
)
values
(
my_table_seq.nextval
)
但当密钥持有者使用以下方法时,返回 ORA-00931: missing identifier\n:
...
var keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(
"MY INSERT QUERY",
new MapSqlParameterSource(),
keyHolder,
new String[]{"code"}
);
...
我调试了 oracle jdbc 驱动程序(ojdbc8/ojdbc10 19.24),发现 into-keyword 后面的空格会导致此行为:AutoKeyInfo.getTableName 返回“\n”而不是“MY_TABLE”(见下图)!删除空格解决了这个问题。