【问题标题】:Using CLOB datatype in SQL stored procedure在 SQL 存储过程中使用 CLOB 数据类型
【发布时间】:2025-12-20 19:35:16
【问题描述】:

我正在调用一个 DB2 SQL 存储过程(在大型机中),其中 CLOB 数据类型作为 out 参数以及其他参数。

CREATE PROCEDURE ACT_GETAUDIT01                                     
       (                                                            
        IN IN_ID            CHAR(12) FOR SBCS DATA CCSID EBCDIC  
       ,IN IN_CURSOR_ID        INTEGER                              
       ,IN IN_PAGING_TS        CHAR(26) FOR SBCS DATA CCSID EBCDIC  
       ,OUT OUT_AUDTDATA  CLOB FOR SBCS DATA CCSID EBCDIC           
       )


   LANGUAGE SQL                                                 
   READS SQL DATA                                               

从 JAVA 调用此存储过程时,execute() 语句中出现以下异常。

CallableStatement cs =  conn.prepareCall(callstmt);

boolean resultsavailable = cs.execute();

线程“main”java.lang.IllegalArgumentException 中的异常:负初始大小:-5
在 java.io.ByteArrayOutputStream.(未知来源)
在 com.ibm.db2.jcc.b.ba.a(ba.java:780)
在 com.ibm.db2.jcc.b.bd.d(bd.java:1961)
在 com.ibm.db2.jcc.b.bd.l(bd.java:378)
在 com.ibm.db2.jcc.b.bd.e(bd.java:91)
在 com.ibm.db2.jcc.b.r.e(r.java:108)
在 com.ibm.db2.jcc.b.bs.i(bs.java:191)
在 com.ibm.db2.jcc.c.cw.o(cw.java:1213)
在 com.ibm.db2.jcc.c.cx.d(cx.java:2061)
在 com.ibm.db2.jcc.c.cy.bq(cy.java:145)
在 com.ibm.db2.jcc.c.cy.execute(cy.java:128)

当我使用VARCHAR 而不是 CLOB 时,一切似乎都运行良好。我也已经正确注册了输出参数。非常感谢任何帮助

【问题讨论】:

  • 我没有在 DB2 上工作过。如何指定 CLOB out 变量的大小?
  • 感谢 shahkalpesh。我尝试给 OUT OUT_AUDTDATA CLOB(5000) FOR SBCS DATA CCSID EBCDIC 。但是我又遇到了同样的错误
  • 从异常中,我只能解释当 Clob 正在由 DB2 驱动程序类方法处理时,负索引会阻止它提取数据。我仔细检查了存储过程以及调用 java 模块是否设置了任何负值。但他们很干净。有人可以告诉我我的分析中是否遗漏了什么
  • 问题是我的 DB2 JDBC jarfile 已经过时。现在我在 Eclipse 中为我的项目添加了更新的 jar 文件(与我正在运行的 db2 版本匹配),它运行良好。 DB2 版本及其对应的 JDBC jar 文件请参考www-01.ibm.com/support/docview.wss?uid=swg21363866
  • 试着给我们一个完整的答案,因为看起来你解决了问题

标签: sql db2 clob


【解决方案1】:

sqlExe 实用程序支持处理 CLOB 字段。你可以看看它。源代码在这里:http://sourceforge.net/projects/sqlexe/

【讨论】: