Oracle存儲過程實現返回多個結果集 在構造函數方法中使用 dataset


DataSet相當你用的數據庫; DataTable相當於你的表。一個 DataSet 可以包含多個 DataTable。如果用datatable只適合返回一個結果集的信息。

例:

 public DataSet Get_TRAFeeQinfenStatus(int type, string BargainOrderCode, string ParkUserId, string BerthCode)
        { 
           

            OracleParameter[] parms = {    
                                        new OracleParameter("VRETURN_LIST1", OracleType.Cursor),
                                        new OracleParameter("VRETURN_LIST2", OracleType.Cursor),
                                        new OracleParameter("VRETURN_LIST3", OracleType.Cursor),
                                        new OracleParameter("Vtype", OracleType.Number),
                                        new OracleParameter("VBargainOrderCode", OracleType.VarChar),
                                        new OracleParameter("VParkUserId", OracleType.VarChar),
                                        new OracleParameter("VBerthCode", OracleType.VarChar)
                                        
                                     };
            parms[0].Direction = ParameterDirection.Output;
            parms[1].Direction = ParameterDirection.Output;
            parms[2].Direction = ParameterDirection.Output;
            parms[3].Value = type;
            parms[4].Value = BargainOrderCode;
            parms[5].Value = ParkUserId;
            parms[6].Value = BerthCode;

            DataSet ds = OracleHelper.ExecuteDataset(CommandType.StoredProcedure, string.Format("{0}.GET_TRAFEEQINFENSTATUS", CA_ZZPP_PK), parms);
            return ds;

        }

oracle存儲過程實現:

 PROCEDURE GET_TRAFEEQINFENSTATUS
    (
         
      VRETURN_LIST1 OUT OUTPUTLIST,--查退費單
      VRETURN_LIST2 OUT OUTPUTLIST,--查欠費單
      VRETURN_LIST3 OUT OUTPUTLIST,--繳費記錄
      VTYPE IN INTEGER DEFAULT NULL,
      VBARGAINORDERCODE IN TRA_ORDERPAYMENTINFO.BARGAINORDERCODE%TYPE DEFAULT NULL, 
      VPARKUSERID IN TRA_ORDERPAYMENTINFO.PARKUSERID%TYPE DEFAULT NULL,
      VBERTHCODE IN TRA_ORDERPAYMENTINFO.BERTHCODE%TYPE DEFAULT NULL
    )
     IS
     VTYPENUMBER  INTEGER;
     VPAYSTATUS   NVARCHAR2(4000);
     VARREARSSTATUS NVARCHAR2(4000);
     VREFUNDSTATUS  NVARCHAR2(4000);
    
    BEGIN
      SELECT  VTYPE INTO VTYPENUMBER FROM DUAL;
     
     IF (VTYPENUMBER=2)
        THEN      
      
    OPEN VRETURN_LIST1  FOR 
    SELECT REFUNDSTATUS,PAYSTATUS FROM  TRA_REFUNDORDER  WHERE BARGAINORDERCODE=VBARGAINORDERCODE
       AND PARKUSERID=VPARKUSERID AND BERTHCODE=VBERTHCODE;
    
    
    --解決: ORA-24338: 未執行語句句柄  一定要進行對游標輸出參數值賦值
      ELSE  OPEN VRETURN_LIST1 FOR SELECT VREFUNDSTATUS AS REFUNDSTATUS,VPAYSTATUS AS PAYSTATUS  FROM DUAL;
     
     END IF;
       
      
      IF (VTYPENUMBER=3 )
         THEN
        
       OPEN VRETURN_LIST2  FOR
        SELECT ARREARSSTATUS FROM  TRA_ARREARSORDER WHERE BARGAINORDERCODE=VBARGAINORDERCODE
       AND PARKUSERID=VPARKUSERID AND BERTHCODE=VBERTHCODE;
     
     ELSE   OPEN VRETURN_LIST2 FOR SELECT VARREARSSTATUS AS ARREARSSTATUS  FROM DUAL;
  
      END IF;
      
      IF (VTYPENUMBER=5 )
          
          THEN
       
       OPEN VRETURN_LIST3  FOR 
       SELECT PAYSTATUS FROM TRA_ORDERPAYMENTINFO WHERE BARGAINORDERCODE=VBARGAINORDERCODE
       AND PARKUSERID=VPARKUSERID AND BERTHCODE=VBERTHCODE;     
   
   
      ELSE   OPEN VRETURN_LIST3 FOR SELECT VPAYSTATUS AS PAYSTATUS  FROM DUAL;
        
     
      END IF;
END;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM