0

我需要完全按照这个问题从 DB2 中提取逗号分隔值,所以在快速谷歌搜索后,我通过在我的 select 子句中使用以下函数找到了解决方案:

SUBSTR(XMLCAST(XMLGROUP(', ' || col_1 AS C ORDER BY col_1)  AS clob), 3) AS RES_COL

现在,返回的输出是 CLOB 而不是 VARCHAR。我尝试增加 VARCHAR 限制,但它给出了 CAST 错误。现在,我在 JAVA 中阅读此 CLOB 列时遇到了以下异常。

SQL state [HY000]; error code [0]; [BEA][DB2 JDBC Driver]SQLDIAGGRP was specified and not null.; nested exception is java.sql.SQLException: [BEA][DB2 JDBC Driver]SQLDIAGGRP was specified and not null.
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:407)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:458)

我无法找到有关此异常的确切含义的任何帮助?我的理解是它与 JDBC 驱动程序有关,但有人可以对此进行更多解释吗?

否则,DB2 高手能否告诉我如何返回 VARCHAR 而不是 CLOB,让 JAVA 在查询时不报错?

4

1 回答 1

0

通过在 XMLCAST 输出上使用 CAST 和 TRIM DB2 函数,我能够解决这个问题。现在我可以从查询中返回 VARCHAR 并且 JAVA 代码也可以正常工作。

   SUBSTR(TRIM(CAST(XMLCAST(XMLGROUP(', ' || col_1 AS C ORDER BY col_1) AS clob) AS VARCHAR(4096))), 3) AS RES_COL
于 2013-04-26T07:16:14.767 回答