2014-10-29 42 views
0

我有一个需求,那就是oracle过程向我发送一个oracle集合。这个集合包含clob数据类型。
我如何得到这个clob数据?如何从oracle集合中检索clob数据

代码:

public static void main(String[] args) throws SQLException { 
      DBLayer db=new DBLayer(); 
      CallableStatement ftRPCaStmt = null; 
      ResultSet requestPropCursor = null; 
      CallableStatement callsmt=null; 
      String dataCol="stg_core.tab_inft_flexi_gl_rec_hd2"; 
      Connection conn=db.getConnection(); 
    ArrayDescriptor structDescriptor1 = ArrayDescriptor.createDescriptor (dataCol.toUpperCase(), conn);     
        ftRPCaStmt = conn.prepareCall("{ call stg_core.gl_test1_clob_c2(?,?,?) }"); 
      ftRPCaStmt.registerOutParameter(1, Types.VARCHAR); 
      ftRPCaStmt.registerOutParameter(2, Types.VARCHAR); 
      ftRPCaStmt.registerOutParameter(3, Types.ARRAY,dataCol.toUpperCase()); 
      ftRPCaStmt.execute(); 

      Object[] data = (Object[]) ((Array) ftRPCaStmt.getObject(3)).getArray();  

当我印我得到的数据值作为Ljava.lang.Object;@b2fd8f数据,但我需要CLOB数据..
请建议..

回答

1

尝试为

callsmt.registerOutParameter(3, OracleTypes.CLOB);

然后

Clob clob = proc_stmt.getClob(3); 
Reader reader = clob .getCharacterStream(); 
      char[] buffer = new char[1]; 
      while(reader.read(buffer) > 0) { 
       log.info(buffer); 
      }   
//   log.info(retValue); 
      .... 

上面的代码片段没有编译,这是提供指导。

+0

@polpan在线程“main”中尝试了您的suggestion.Exception异常时出现以下错误:java.sql.SQLException:ORA-06550:第1行第7列: PLS-00306:错误的调用参数数量或类型到'GL_TEST1_CLOB_C2' ORA-06550:第1行,第7列: PL/SQL:语句被忽略 – user2500313 2014-10-29 08:52:07

+0

@ user2500313通过编辑您的问题来添加'stg_core.gl_test1_clob_c2'函数的签名。 – user75ponic 2014-10-29 09:21:22