EAS调用存储

            CallableStatement proc = null;
            String cp = "01.02";
            fileLogger.log("===========cp="+cp);
            ResultSet rs2 =null;
            // 准备调用存储过程
            proc = this.getConnection(ctx).prepareCall("{ call proc_query_bzj(?,?,?)}");
            // 设置输入参数
            proc.setString(1, cp); // 设置第一个输入参数
            proc.setString(2, "202502"); // 设置第二个输入参数
            // 注册OUT参数为REF CURSOR
            proc.registerOutParameter(3, OracleTypes.CURSOR);
            // 执行存储过程
            proc.execute();// 执行
             // 获取OUT参数的结果集
            ResultSet rs = (ResultSet) proc.getObject(3);
            //处理结果集
            while(rs.next()){
                String COMPANYNO = rs.getString("COMPANYNO");
                String ASSACCOUNTNUMBER = rs.getString("ASSACCOUNTNUMBER");
                BigDecimal DIFFENDINGBALANCE = rs.getBigDecimal("DIFFENDINGBALANCE");
            }

在EAS中调用存储过程如上,

1、第一个和第二个问号表示入参,最后一个表示出参

2、OracleTypes是oracle.jdbc包里的

3、proc_query_bzj 是存储的名称

给出的存储过程sql如下

create or replace procedure proc_query_bzj(
      v_companyNo             varchar2, --定义入参公司编码
      v_periodNumber          varchar2, --定义入参期间编码
      param_resultSet OUT SYS_REFCURSOR --定义出参返回结果集
    ) as
begin
  open param_resultSet FOR
  SELECT RAB.RAB_COM_FNAME AS COMPANY,
               RAB.RAB_COM_FNUMBER AS COMPANYNO,
               RAB.RAB_ASSBANK_FNUMBER AS ASSACCOUNTNUMBER,
               RAB.RAB_ASSBANK_FNAME AS ASSACCOUNTNAME,
               TO_NUMBER(NEXT_PERIOD.FNUMBER) AS PERIODFNUMBER,
               SUM(ROUND(NVL(ORG_TABLE.ASSENDINGBALANCE, 0), 2)) AS ASSINITIALBALANCE,
               0 AS ASSCURPERIODADDAMOUNT,
               0 AS ASSCURPERIODRETURNAMOUNT,
               0 AS ASSINTERESTAMOUNT,
               SUM(ROUND(NVL(ORG_TABLE.ASSENDINGBALANCE, 0), 2)) AS ASSENDINGBALANCE,
               RAB.RAB_AV_FNUMBER AS GLACCOUNTANT,
               RAB.RAB_GLBANK_FNAME AS GLACCOUNTNUMBER,
               0 AS GLINITIALBALANCE,
               0 AS GLCURPERIODADDAMOUNT,
               0 AS GLCURPERIODRETURNAMOUNT,
               0 AS GLINTERESTAMOUNT,
               0 AS GLENDINGBALANCE,
               0 AS DIFFINITIALBALANCE,
               0 AS DIFFADDAMOUNT,
               0 AS DIFFSUBAMOUNT,
               0 AS DIFFINTERESTAMOUNT,
               0 AS DIFFENDINGBALANCE
          FROM CT_NT_ASSURECHECK ORG_TABLE
          LEFT JOIN T_ORG_BASEUNIT COM
            ON ORG_TABLE.COMPANYNO = COM.FNUMBER
          LEFT JOIN (SELECT FNUMBER, FBEGINDATE
                      FROM T_BD_PERIOD
                     GROUP BY FNUMBER, FBEGINDATE) NOW_PERIOD
            ON ORG_TABLE.PERIODFNUMBER = NOW_PERIOD.FNUMBER
          LEFT JOIN (SELECT FNUMBER, FBEGINDATE
                      FROM T_BD_PERIOD
                     GROUP BY FNUMBER, FBEGINDATE) NEXT_PERIOD
            ON ADD_MONTHS(NOW_PERIOD.FBEGINDATE, 1) = NEXT_PERIOD.FBEGINDATE
         INNER JOIN VIEW_ACCOUNT_RAB RAB
            ON ORG_TABLE.COMPANYNO = RAB.RAB_COM_FNUMBER
           AND ORG_TABLE.ASSACCOUNTNUMBER = RAB.RAB_ASSBANK_FNUMBER
           AND ORG_TABLE.GLACCOUNTANT = RAB.RAB_AV_FNUMBER
           AND ORG_TABLE.GLACCOUNTNUMBER = RAB.RAB_GLBANK_FNAME
           WHERE COM.FNUMBER=v_companyNo AND NEXT_PERIOD.FNUMBER =v_periodNumber
         GROUP BY RAB.RAB_COM_FNAME,
                  RAB.RAB_COM_FNUMBER,
                  RAB.RAB_ASSBANK_FNUMBER,
                  RAB.RAB_ASSBANK_FNAME,
                  NEXT_PERIOD.FNUMBER,
                  RAB.RAB_AV_FNUMBER;     
end proc_query_bzj;

 

posted @ 2025-03-13 17:39  凉了记忆  阅读(26)  评论(0)    收藏  举报