Java 使用自定义类型执行存储过程会产生空结果

Java 使用自定义类型执行存储过程会产生空结果,java,plsql,spring-jdbc,Java,Plsql,Spring Jdbc,我已经为下面的plsql代码编写了java代码来执行存储过程。当我从Java代码运行该过程时,并没有得到结果 PLSQL 我的Java存储过程类 @Component public class GetOffersFromCAMFORM extends StoredProcedure { private static final String OFEERS_LIST = "Offers"; @Autowired private String MySchema; @Autowir

我已经为下面的plsql代码编写了java代码来执行存储过程。当我从Java代码运行该过程时,并没有得到结果

PLSQL

我的Java存储过程类

@Component
public class GetOffersFromCAMFORM extends StoredProcedure {
  private static final String OFEERS_LIST = "Offers";

  @Autowired
  private String MySchema;

  @Autowired
  @Qualifier("MyDataSource")
  private DataSource dataSourceMy;

  @PostConstruct
  public void postConstruct() {
    this.setDataSource(dataSourceMy);
    this.setSql(MySchema + ".getOffersFromCAMFORM");

    declareParameter(new SqlParameter(SUB_FORM, Types.ARRAY, MySchema + ".CAMFORMLIST_ID_TYPES"));
    declareParameter(
        new SqlOutParameter(OFEERS_LIST, OracleTypes.ARRAY,
        MySchema + ".OFEERS_INFO_TYPE", new ReturnType()));
  }

  @SuppressWarnings("unchecked")
  public List<MyOffer> execute(final String subscriptionForm, final String subscriptionClass)
      throws Exception {
    Map<String, Object> objects = new HashMap<String, Object>();
    objects.put(SUB_FORM, new AbstractSqlTypeValue() {
      @Override
      protected Object createTypeValue(Connection con, int SqlType, String typeName)
          throws SQLException {

        OracleConnection oracle =
            (OracleConnection) (new DelegatingConnection(con)).getInnermostDelegate();
        if (oracle != null) {
          con = oracle;
        }

        ArrayList<Struct> CAMFORMListIdType = new ArrayList<Struct>();

        CAMFORMListIdType
            .add(((OracleConnection) con).createStruct(MySchema + ".CAMFORMLIST_ID_TYPE",
                new String[] {subscriptionForm, subscriptionClass}));

        return ((OracleConnection) con).createARRAY(MySchema + ".CAMFORMLIST_ID_TYPES",
            CAMFORMListIdType.toArray(new Struct[] {}));
      }
    });

    Map<?, ?> result = execute(objects);

    List<MyOffer> items = (List<MyOffer>) result.get(OFEERS_LIST);
    return items;
  }

}
@组件
公共类GetOffersFromCAMFORM扩展了StoredProcess{
私有静态最终字符串的eers_LIST=“Offers”;
@自动连线
私有字符串MySchema;
@自动连线
@限定符(“MyDataSource”)
私有数据源数据源;
@施工后
施工后公共空间(){
this.setDataSource(dataSourceMy);
这个.setSql(MySchema+“.getOffersFromCAMFORM”);
declareParameter(新的SqlParameter(SUB_FORM,Types.ARRAY,MySchema+“.CAMFORMLIST_ID_Types”);
申报参数(
新的SqlOutParameter(OFEERS_列表、OracleTypes.ARRAY、,
MySchema+“.OFEERS\u INFO\u TYPE”,新返回类型();
}
@抑制警告(“未选中”)
公共列表执行(最终字符串subscriptionForm,最终字符串subscriptionClass)
抛出异常{
Map objects=newhashmap();
put(子表单,新的AbstractSqlTypeValue(){
@凌驾
受保护对象createTypeValue(连接con、int-SqlType、字符串typeName)
抛出SQLException{
OracleConnection oracle=
(OracleConnection)(新的DelegatingConnection(con)).getInnermostDelegate();
if(oracle!=null){
con=甲骨文;
}
ArrayList CAMFORMListIdType=新ArrayList();
CAMFORMListIdType
.add(((OracleConnection)con).createStruct(MySchema+“.CAMFORMLIST\u ID\u TYPE”,
新字符串[]{subscriptionForm,subscriptionClass}));
return((OracleConnection)con).createARRAY(MySchema+“.CAMFORMLIST\u ID\u TYPES”,
toArray(新结构[]{});
}
});
映射结果=执行(对象);
List items=(List)result.get(of eers_List);
退货项目;
}
}
返回类型

public class ReturnType implements SqlReturnType {


  @Override
  public List<PCOffer> getTypeValue(CallableStatement cs, int colIndx, int sqlType,
      String typeName) throws SQLException {

    Array dba = (Array) cs.getObject(colIndx);
    if (dba == null || ((Object[]) dba.getArray()).length == 0) {
      return null;
    }



    ...


    }
public类ReturnType实现SqlReturnType{
@凌驾
公共列表getTypeValue(CallableStatement cs、int-colIndx、int-sqlType、,
字符串类型名)引发SQLException{
数组dba=(数组)cs.getObject(colIndx);
if(dba==null | |((Object[])dba.getArray()).length==0){
返回null;
}
...
}
使用Ojdbc 7驱动程序

我没有得到输出。当我执行procueudre时,我在ReturnType类中得到空数组

我做错什么了吗

public class ReturnType implements SqlReturnType {


  @Override
  public List<PCOffer> getTypeValue(CallableStatement cs, int colIndx, int sqlType,
      String typeName) throws SQLException {

    Array dba = (Array) cs.getObject(colIndx);
    if (dba == null || ((Object[]) dba.getArray()).length == 0) {
      return null;
    }



    ...


    }