• Java SpringMvc+hibernate架构中,调用Oracle中的sp,传递数组参数


    一、问题

      我们调用数据,大都是可以直接获取表中的数据,或者用复杂点的sql语句组成的。但是,有时候,当这样达不到我们要的全部数据的时候,这时,我们就用到了存储过程【sp】,如果sp需要参数是数组的话,要怎么办呢?

    二、解决之法

    public CbsResult payForBills(final String sapId, final String office,final ArrayList<String> custCdes) {
                    Connection con = DBUtil.getCbsConnection();
                    ArrayDescriptor arrDesc;
                    ARRAY arr;
                    CbsResult cbs=null;
                    CallableStatement cs=null;
                    try {
                        cs=con.prepareCall("{call CBS_TEST.CBS_PKG_EMF_PCARD.CBS_PRC_PCARD_DEDUCT_ITF(?,?,?,?,?,?,?,?,?,?)}");
                        arrDesc = ArrayDescriptor.createDescriptor("CBS_TEST.CHAR_ARRAY", getNativeConnection(con));   
                        arr = new ARRAY(arrDesc, getNativeConnection(con), custCdes.toArray());
                        cs.setString(1, sapId);
                        cs.setString(2, office);
                        cs.setArray(3, arr);
                        cs.setString(4, "EMF");
                        cs.setString(5, "EB");// EB/CORIS
                        cs.setString(6, "OB");
                        cs.setString(7, "O");
                        cs.setString(8, "DEDUCT");
                        cs.registerOutParameter(9, OracleTypes.VARCHAR);
                        cs.registerOutParameter(10, OracleTypes.VARCHAR);
                        cs.execute();
                        cbs=new CbsResult(cs.getString(9), cs.getString(10), null);
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }finally{
                        DBUtil.close(con, cs, null);
                    }
                    return cbs==null?new CbsResult():cbs; 
        }

    注意:

      1、数组参数,必须在oracle数据库的存储过程中定义一个集合类型:

    create or replace
    type  CHAR_ARRAY  as table of VARCHAR2(20);

      2、红色字体是存储过程中,数组的定义的名字,一定要保持一致。

      3、绿色字体,是数组参数具体的实现方法。

  • 相关阅读:
    ProtoType Design Tools
    什么是publickeytoken及publickeytoken的作用
    Windows最高权限system帐户
    Q70 AV01本本安装MAC
    解决MDict3在PPC下乱码的问题
    QT_XSP.CPP
    QT_XSP.CPP
    SetupFactory脚本
    DVD IFO FILE HEADER
    SerialPort comstat is being used without defining
  • 原文地址:https://www.cnblogs.com/renxiaoren/p/5511899.html
Copyright © 2020-2023  润新知