Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从java类调用out参数为表类型的过程(2)_Java_Oracle_Plsql_Oracle11g - Fatal编程技术网

如何从java类调用out参数为表类型的过程(2)

如何从java类调用out参数为表类型的过程(2),java,oracle,plsql,oracle11g,Java,Oracle,Plsql,Oracle11g,这里已经给出了答案: 但我们有一个问题,返回值vor code始终为“?”,trxSeq的值返回正确。 如果我们直接在db上调用它,代码中就充满了值 我们尝试使用varchar2,char,varchar类型的代码。没有区别 desc t_mam_code: TYPE t_mam_code AS OBJECT( code VARCHAR2(30),

这里已经给出了答案:

但我们有一个问题,返回值vor code始终为“?”,trxSeq的值返回正确。 如果我们直接在db上调用它,代码中就充满了值

我们尝试使用varchar2,char,varchar类型的代码。没有区别

desc t_mam_code:
       TYPE t_mam_code AS OBJECT(                              
         code VARCHAR2(30),                                                
         trxSeq NUMBER(12)
java方法

final String typeName = "T_MAM_CODE";
final String typeTableName = "T_MAM_CODE_TAB";

// no difference, if we use Oracle Connection or java.sql.Connection
OracleConnection oracleConnection= connection.unwrap(OracleConnection.class);

// Get a description of your type (Oracle specific)
final StructDescriptor structDescriptor = StructDescriptor.createDescriptor(typeName, oracleConnection);
final ResultSetMetaData metaData = structDescriptor.getMetaData();

CallableStatement call = oracleConnection.prepareCall("{call business.getCodes(?, ?, ?, ?, ?, ?, ?)}");
// CallableStatement call = connection.prepareCall("{call business.getCodes(?, ?, ?, ?, ?, ?, ?)}");

int i = 1;
call.setString(i++, shopId);
call.setDate(i++, new java.sql.Date(consumerStamp.getTime()));
call.setInt(i++, version);
...

int out1 = i++;

call.registerOutParameter(out1, Types.ARRAY, typeTableName);
//call.registerOutParameter(out1, OracleTypes.ARRAY, typeTableName);

call.execute();

Object[] data = (Object[]) ((Array) call.getObject(out1)).getArray();
for(Object tmp : data) {
  Struct row = (Struct) tmp;
  // Attributes are index 1 based...
  int idx = 1;
  for(Object attribute : row.getAttributes()) {               
     System.out.println(metaData.getColumnName(idx) + " " + attribute);                                            
     ++idx;
}
输出为:

CODE ??? 
TRXSEQ 200001520606 ...
输出应为:

CODE ABC1234 
TRXSEQ 200001520606

我们通过hibernate 4.1.12使用Java 1.6、Oracle 11g、驱动程序ojdbc6-11.2.0.3.0.jar

感谢您的提示didxga-您让我们走上了正确的方向。我们将orai18n.jar添加到类路径中,现在一切正常:)

我猜这是编码问题,对该数据使用直接选择查询时是否有任何乱码?