ORACLE TYPE運用

來源:互聯網
上載者:User
 

1.建立oracle 類型
  CREATE OR REPLACE TYPE BCESCDE.IBPS_ACCT_AMT_RECORD_TYPE IS OBJECT (
  OLD_CHANNEL_SEQ_NO   VARCHAR2(30),       --原查詢申請的渠道流水號
  PARTYNO              VARCHAR2(12),       --客戶號
  AGREEMENT_NO         VARCHAR2(60),       --協議號
  ACCT_NO              VARCHAR2(32),       --帳號
  ACCT_TYPE            VARCHAR2(1),        --帳號類型 0-對公客戶,1-借記卡,2-個人存摺,3-貸記卡
  SUB_ACCT_NO          VARCHAR2(32),       --子帳號 信用卡明細時有,其他情況無
  CURR_TYPE            VARCHAR2(3),         --幣種
  BALANCE              NUMBER,              --餘額  
  DEPOSIT_TYPE         VARCHAR2(40),        --存款類型名稱
  FROM_DATE            VARCHAR2(10),        --起息日期
  END_DATE             VARCHAR2(10),        --到期日
  CREDIT_LIMIT         NUMBER,              --信用額度
  );

  CREATE OR REPLACE TYPE BCESCDE.IBPS_ACCT_AMT_TABLE_TYPE IS TABLE OF BCESCDE.IBPS_ACCT_AMT_RECORD_TYPE;

2.過程輸入參數中的運用
  PROCEDURE ibp_add_bill_bat_pro(in_partyno   IN VARCHAR2, --客戶號
                                                                     in_bill_list IN ibps_acct_amt_table_type, --
                                                                    out_retcode  OUT VARCHAR2, --輸出:
                                                                    --0成功
                                                                      --9系統異常
                                                                   out_message OUT VARCHAR2 --輸出執行結果資訊
                                                                    ) IS
      i NUMBER;
      v_serial_no VARCHAR2(20);
   BEGIN
      i := in_bill_list.FIRST;
      LOOP
         v_serial_no := ibp_gen_serial_no_pro('1');
         INSERT INTO ibp_bill_tab
            (partyno,
             handFlag,
             opType,
             BillId,
             billFlag,
             accNo,
             accName,
             insert_time,
             update_time)
         VALUES
            (in_partyno,
             in_bill_list(i).handFlag,
             '1',--0修改1新增
             v_serial_no,
             in_bill_list(i).billFlag,
             in_bill_list(i).accNo,
             in_bill_list(i).accName,
             SYSDATE,
             SYSDATE);

         EXIT WHEN i = in_bill_list.LAST;
         i := in_bill_list.NEXT(i);
      END LOOP;

      out_retcode := '0';
      out_message := '成功';
   EXCEPTION
      WHEN OTHERS THEN
         out_retcode := '9';
         out_message := '[ibp_add_bill_bat_pro]錯誤資訊' || to_char(SQLCODE) || '-' ||
                        substrb(SQLERRM, 1, 120);
   END ibp_add_bill_bat_pro;
  
  
3.在java中調用過程
       Connection oConn = null;    
    oConn = ((WLConnection)getSqlMapClientTemplate().getDataSource().getConnection()).getVendorConnection();
    oConn.setAutoCommit(false);
    
    //建立模型
    StructDescriptor structDesc = StructDescriptor.createDescriptor(getSchema() + ".IBP_BILL_RECORD_TYPE" , oConn);
    ArrayDescriptor arrayDesc = ArrayDescriptor.createDescriptor(getSchema() + ".IBP_BILL_TABLE_TYPE" , oConn);
    
    Object[] params = new Object[billInfoList.size()];
       
        //填充資料
    for(int i = 0, size = billInfoList.size(); i < size; i++) {
     BillInfoInDTO billInfo = (BillInfoInDTO)billInfoList.get(i);
     BigDecimal tranAmt = null;
     BigDecimal balance = null;
     if(null != billInfo.getTranAmt() && !"".equals(billInfo.getTranAmt())){
      tranAmt = new BigDecimal(billInfo.getTranAmt());
     }
     if(null != billInfo.getBalance() && !"".equals(billInfo.getBalance())) {
      balance = new BigDecimal(billInfo.getBalance());
     }
     Object[] javaObjects = {billInfo.getBillId(), billInfo.getHandFlag(), billInfo.getOpType(),
                       billInfo.getBillFlag(), billInfo.getAccNo(), billInfo.getAccName()};
     STRUCT struct = new STRUCT(structDesc, oConn, javaObjects);
     params[i] = struct;
    }
    ARRAY pArray = new ARRAY(arrayDesc, oConn, params);
    //調用過程
    OracleCallableStatement ocs = (OracleCallableStatement)oConn.prepareCall("{call ibp_newebank_pkg.ibp_add_bill_bat_pro(?,?,?,?)}");
    ocs.setString(1, partyNo);
    ocs.setARRAY(2, pArray);
    ocs.registerOutParameter(3, Types.VARCHAR);
    ocs.registerOutParameter(4, Types.VARCHAR);
    ocs.execute();

    String retCode = ocs.getString(3);
    String outMessage = ocs.getString(4);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.