2013-04-25 106 views
0

我需要拉從DB2逗號分隔值完全按照this問題,所以以後快速google搜索,我發現該解決方案通過在我的SELECT子句中使用以下功能:問題 - 處理CLOB數據類型

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在查詢時不會發生抱怨?

+0

忘了提及我在使用DB2 9.1,所以LISTAGG函數不可用。 – gsonal 2013-04-26 05:30:41

回答

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