在 JDBC 中使用 unnest(array[someArray]) 发送三个数组的异常

Posted

技术标签:

【中文标题】在 JDBC 中使用 unnest(array[someArray]) 发送三个数组的异常【英文标题】:Exception sending three arrays with unnest(array[someArray]) in JDBC 【发布时间】:2019-10-16 05:33:32 【问题描述】:

我无法将 3 个数组发送到 SQL 语句中,它会引发异常

select t.ttt, t.created_date, concat_ws('-',lp.mmm, lp.ccc, lp.eee ) from tasks t
join positions p on t.id = p.task_id
left join lte_position lp on p.id = lp.id
where t.ttt in (:identities) and (lp.mmm, lp.ccc, lp.eee) in
((select mmm,ccc,eee from ((select unnest(array[:mmm]) as mmm, unnest(array[:ccc]) as ccc, unnest(array[:eee]) as eee)) as temp))
order by t.ttt DESC

我想在mmmccceee 中发送 3 个数组。当我在 Postgres 控制台上尝试时,它工作正常,但是当我在 Java 代码中尝试时,抛出异常

org.postgresql.util.PSQLException: ERROR: cannot cast type record to integer
Position: 474

【问题讨论】:

【参考方案1】:

按照你写的方式,PostgreSQL认为你的整个参数字符串是一个整数。

而不是

unnest(array[:mmm])

使用

unnest(CAST(:mmm AS integer[])

但是参数必须看起来像

1,23,456

包括大括号。这是PostgreSQL中数组的字符串表示。

补充观察:你为什么使用:mmm? JDBC 参数必须写为?

【讨论】:

1,23,456 如何使用 jdbctemplate 发送此参数? 不知道,没听说过 jdbctemplate。我以为问题是关于 JDBC 的。 用于 jaca Spring jdbc 的 NamedParameterJdbcTemplate

以上是关于在 JDBC 中使用 unnest(array[someArray]) 发送三个数组的异常的主要内容,如果未能解决你的问题,请参考以下文章

GENERATE_TIMESTAMP_ARRAY() 上的 UNNEST 导致语法错误

使用了 unnest(),但仍然无法访问类型为 ARRAY<STRUCT<text STRING, language STRING>> 的值的字段文本,大查询

BigQuery 中的 Unnest 导致“数组”错误

FlinkSQL 列转行/解开map array/unnest/lateral table udtf

FlinkSQL 列转行/解开map array/unnest/lateral table udtf

FlinkSQL 列转行/解开map array/unnest/lateral table udtf