IBATIS 存儲過程寫法

上代碼!!!!
/**
     * 訂單錄入頁面數據,存儲過程方式
     * @param customerOrderInputDTO
     * @return
     * @throws BizServiceException
     */
    public CustomerOrderInputRspDTO orderInput(CustomerOrderInputDTO customerOrderInputDTO) throws BizServiceException{
        CustomerOrderInputRspDTO customerOrderInputRspDTO = new CustomerOrderInputRspDTO();
        Map<String,Object> map = new HashMap<String, Object>();
        setParameterMapInput(map,customerOrderInputDTO);	
        Integer orderType = customerOrderInputDTO.getCustomerOrderDTO().getOrderType();
        if(orderType==null){
        	throw new BizServiceException("orderType is null");
        }
        Long startTime = System.currentTimeMillis();
        /**
         * 充值卡訂單錄入
         	BO需要返回的值有:
			productDTOs
			productDTO:cardLayouts/packages(包含packageFee)/replaceFee/validityPeriod
			custContractDTO:annualFee/deliveryFee/cardFee
			customerDTO:invoiceAddressList/invoiceCompanyList/deliveryPointList/deliveryPoint.recipientList/name/id
			deliveryRecipientDTOs
			orderDate/sales	
			cardValidityPeriod
			初始頁面需要返回currDate/sales
			選擇客戶或者產品->訪問後臺,返回數據重新加載整個頁面,參數有客戶號或產品號
			三種狀態:無客戶號、有客戶號無產品號、有客戶號有產品號
         */
        if(orderType.equals(1)){
        	customerOrderDAO.queryForObject("RLOrderInput",map);
        }
        /**
    	 * 充值訂單錄入頁面
    	 * BO需要返回的值有:
    		productDTOs
    		productDTO.accTypes/cardValidityPeriod
    		custAcctypeContractDTO.serviceFee
    		customerDTO:invoiceAddressList/invoiceCompanyList/name/id
    		orderDate/sales
    	  	初始頁面需要返回currDate/sales
    	  	選擇客戶或者產品或服務->訪問後臺,返回數據重新加載整個頁面,參數有客戶號或產品號
    		四種狀態:無客戶號、有客戶號無產品號、有客戶號有產品號、有服務號
    	 */
        if(orderType.equals(2)){
        	customerOrderDAO.queryForObject("CROrderInput",map);
        }
        /**
    	 * 禮品卡庫存訂單錄入頁面數據,存儲過程方式
    	 * BO需要返回的值:
    		productDTOs
    		productDTO:accTypes/cardLayouts/prodFaceValues
    		cardValidityPeriod
    		orderDate
    		選擇產品->訪問後臺,重載整個頁面
    		兩種狀態:初始頁面無產品號、選擇產品後有產品號
    	 */
        if(orderType.equals(3)){
        	customerOrderDAO.queryForObject("GSTOrderInput",map);
        }
        /**
    	 * 禮品卡銷售訂單錄入頁面數據,存儲過程方式
    	 * BO需要返回的值:
    		productDTOs
    		productDTO.accTypes
    		custContractDTO:deliveryFee
    		customerDTO:invoiceAddressList/invoiceCompanyList/deliveryPointList/deliveryPoint.recipientList/name/id
    		orderDate/sales
    	   	初始頁面需要返回currDate/sales
    	   	選擇客戶或者產品->訪問後臺,返回數據重新加載整個頁面,參數有客戶號或產品號
    		三種狀態:無客戶號、有客戶號無產品號、有客戶號有產品號
    	 */
        if(orderType.equals(4)){
        	customerOrderDAO.queryForObject("GSLOrderInput",map);
        }
        
     	System.out.println("================= cost time  "+(System.currentTimeMillis() - startTime)+"/1000  seconds");
     	parseParameterMapResult(map, customerOrderInputRspDTO,customerOrderInputDTO);
    	return customerOrderInputRspDTO;
    }



/**
     * 訂單錄入,調用存儲過程以前,設置其參數parameterMap
     * @param map
     * @param customerOrderInputDTO
     * @throws BizServiceException
     */
    private void setParameterMapInput(Map<String,Object> map,CustomerOrderInputDTO customerOrderInputDTO) throws BizServiceException{
    	CustomerOrderDTO customerOrderDTO = customerOrderInputDTO.getCustomerOrderDTO();
    	Long productId = customerOrderDTO.getProductId();
        Short acctypeId = customerOrderDTO.getAccTypeId();
        Long customerId = customerOrderDTO.getCustomerId();
        Integer orderType = customerOrderDTO.getOrderType();
        Long orderId = customerOrderDTO.getOrderId();
        productId = (productId==null)?-1l:productId;
        customerId = (customerId==null)?-1l:customerId;
        acctypeId = (acctypeId==null)?(short)-1:acctypeId;
        orderId = (orderId==null)?-1l:orderId;
    	map.put("i_issuerId", customerOrderInputDTO.getDefaultIssuerId());
     	map.put("i_issuerGroupId", customerOrderInputDTO.getDefaultIssuerGroupId());
     	map.put("i_orderType", orderType);
     	map.put("i_customerId",customerId);
     	map.put("i_productId", productId);
     	map.put("i_accTypeId", acctypeId);
     	map.put("i_orderId", orderId);
    }
    /**
     * 訂單錄入,調用存儲過程以後,處理其返回參數,由MAP轉爲DTO
     * @param map
     * @param customerOrderInputRspDTO
     * @throws BizServiceException
     */
    @SuppressWarnings("unchecked")
	private void parseParameterMapResult(Map<String,Object> map,CustomerOrderInputRspDTO customerOrderInputRspDTO,CustomerOrderInputDTO customerOrderInputDTO) throws BizServiceException{
		try{
			CustomerDTO customerDTO = new CustomerDTO();
			customerDTO.setCustomerId(customerOrderInputDTO.getCustomerOrderDTO().getCustomerId());
			//設置銷售人員列表
			List<User> users = (List<User>) map.get("o_sales");
			List<UserDTO> saleUserList = new ArrayList<UserDTO>();
			if(users!=null){
				for (User user : users) {
					UserDTO dto = new UserDTO();
					ReflectionUtil.copyProperties(user, dto);
					saleUserList.add(dto);
				}
			}
			//設置訂單日期
			List<Map> currDates = (List<Map>) map.get("o_orderDate");
			Date currDate = null;
			if(currDates!=null&&currDates.size()>0&&currDates.get(0).get("currDate")!=null){
				currDate = new SimpleDateFormat("yyyyMMdd").parse(currDates.get(0).get("currDate").toString());
			}
			//設置產品列表
			List<ProductDTO> products = (List<ProductDTO>) map.get("o_products");
			//設置產品
			List<ProductDTO> products2 = (List<ProductDTO>) map.get("o_product");
			ProductDTO productDTO = new ProductDTO();
			if(products2!=null&&products2.size()>0){
				productDTO = products2.get(0);
			}
			//設置收貨地址列表,包含地址下收貨人列表
			List<DeliveryPointDTO> deliveryPointDTOs = (List<DeliveryPointDTO>) map.get("o_deliveryPointList");
			if(deliveryPointDTOs!=null&&deliveryPointDTOs.size()>0){
				for(DeliveryPointDTO deliveryPointDTO:deliveryPointDTOs){
					String str = deliveryPointDTO.getRecipientsStr();//格式爲"..id,name;.."
					if(str==null){
						break;
					}
					List<DeliveryRecipientDTO> deliveryRecipientDTOs = new ArrayList<DeliveryRecipientDTO>();
					for(String s:str.split(";")){
						if(s==null){
							break;
						}
						DeliveryRecipientDTO deliveryRecipientDTO = new DeliveryRecipientDTO();
						deliveryRecipientDTO.setRecipientId(Long.parseLong(s.split(",")[0]));
						deliveryRecipientDTO.setRecipient(s.split(",")[1]);
						deliveryRecipientDTOs.add(deliveryRecipientDTO);
					}
					deliveryPointDTO.setRecipientList(deliveryRecipientDTOs);
				}
			}
			customerDTO.setDeliveryPointList(deliveryPointDTOs);
			//設置收貨人列表爲第一個地址下收貨人列表
			List<DeliveryRecipientDTO> deliveryRecipientDTOs = new ArrayList<DeliveryRecipientDTO>();
			if(deliveryPointDTOs!=null&&deliveryPointDTOs.size()>0){
				DeliveryPointDTO deliveryPointDTO = deliveryPointDTOs.get(0);
				if(deliveryPointDTO!=null){
					deliveryRecipientDTOs = deliveryPointDTO.getRecipientList();
				}
			}
			//設置發票地址列表
			List<InvoiceAddressDTO> invoiceAddressDTOs = (List<InvoiceAddressDTO>) map.get("o_invoiceAddressList");
			customerDTO.setInvoiceAddressList(invoiceAddressDTOs);
			//設置發票公司列表
			List<InvoiceCompanyDTO> invoiceCompanyDTOs = (List<InvoiceCompanyDTO>) map.get("o_invoiceCompanyList");
			customerDTO.setInvoiceCompanyList(invoiceCompanyDTOs);
			//設置產品下服務列表
			List<AccTypeDTO> accTypeDTOs = (List<AccTypeDTO>) map.get("o_accTypes");
			productDTO.setAccTypes(accTypeDTOs);
			//設置產品下包裝列表
			List<PackageDTO> packageDTOs = (List<PackageDTO>) map.get("o_packages");
			productDTO.setPackages(packageDTOs);
			//設置產品合同,結果集只有一條
			List<CustContractDTO> contractDTOs = (List<CustContractDTO>) map.get("o_custContracts");
            CustContractDTO contractDTO = new CustContractDTO();
            if(contractDTOs!=null&&contractDTOs.size()>0){
            	contractDTO = contractDTOs.get(0);
            }
			//設置產品下卡面列表
			List<CardLayoutDTO> cardLayoutDTOs = (List<CardLayoutDTO>) map.get("o_cardLayouts");
			productDTO.setCardLayouts(cardLayoutDTOs);
			//設置產品下面額列表
			List<ProdFaceValueDTO> prodFaceValueDTOs = (List<ProdFaceValueDTO>) map.get("o_prodFaceValues");
			productDTO.setProdFaceValues(prodFaceValueDTOs);
			//設置客戶姓名
			String customerName = (String)map.get("o_customerName");
			customerDTO.setCustomerName(customerName);
			//設置服務費(服務合同)
			BigDecimal serviceFee = (BigDecimal) map.get("o_serviceFee");
			CustAcctypeContractDTO custAcctypeContractDTO = new CustAcctypeContractDTO();
			if(serviceFee!=null){
				custAcctypeContractDTO.setServiceFee(serviceFee);
			}
			
			CustomerOrderDTO customerOrderDTO = customerOrderInputDTO.getCustomerOrderDTO();
			if(map.get("o_customerOrder")!=null&&((List)map.get("o_customerOrder")).size()>0){
				ReflectionUtil.copyProperties((CustomerOrder)((List)map.get("o_customerOrder")).get(0), customerOrderDTO);
				customerOrderDTO.setCustomerName(customerName);
				if(map.get("o_productName")!=null){
					customerOrderDTO.setProductName(map.get("o_productName").toString());
				}
				if(map.get("o_issuerName")!=null){
					customerOrderDTO.setIssuerName(map.get("o_issuerName").toString());
				}
			}else{
				customerOrderDTO.setOrderDate(currDate);
				customerOrderDTO.setCustomerId(customerDTO.getCustomerId());
				customerOrderDTO.setCustomerName(customerName);
				customerOrderDTO.setProductId(productDTO.getProductId());
				Date cardValidityPeriod = null;
				if(productDTO.getValidityePeriod()!=null){
					cardValidityPeriod = DateUtil.countCardValidate(new Date(), productDTO.getValidityePeriod());
				}
	            customerOrderDTO.setCardValidityPeriod(cardValidityPeriod);
	            customerOrderDTO.setAccTypeId(custAcctypeContractDTO.getAccTypeId());
	            if(deliveryRecipientDTOs!=null&&deliveryRecipientDTOs.size()>0){
	            	customerOrderDTO.setOrderContact(deliveryRecipientDTOs.get(0).getRecipientId());
	            }
			}
			customerOrderInputRspDTO.setSaleUserList(saleUserList);
			customerOrderInputRspDTO.setCustomerOrderDTO(customerOrderDTO);
			customerOrderInputRspDTO.setCustContractDTO(contractDTO);
			customerOrderInputRspDTO.setProductDTO(productDTO);
			customerOrderInputRspDTO.setProductDTOs(products);
			customerOrderInputRspDTO.setCustomerDTO(customerDTO);
			customerOrderInputRspDTO.setDeliveryRecipientDTOs(deliveryRecipientDTOs);
			customerOrderInputRspDTO.setCustAcctypeContractDTO(custAcctypeContractDTO);
		}catch(Exception e){
			e.printStackTrace();
			throw new BizServiceException("系統異常");
		}
    }

IBATIS XML文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="TB_ENT_CUSTOMER_ORDER"> 
	
	<resultMap id="r_batCtrl" class="java.util.HashMap">
		<result property="currDate" column="curr_date" />
	</resultMap>
	<resultMap class="com.***.product.dto.ProductDTO" id="r_productDTO">
		<result property="productId" column="product_id"/>
		<result property="productName" column="product_name"/>
		<result property="replaceFee" column="replace_fee"/>
		<result property="validityePeriod" column="validitye_period"/>
	</resultMap>
	<resultMap class="com.***.acctype.dto.AccTypeDTO" id="r_accTypeDTO">
		<result property="accTypeId" column="acc_type_id"/>
		<result property="accTypeName" column="acc_type_name"/>
	</resultMap>
	<resultMap class="com.***.packag.dto.PackageDTO" id="r_packageDTO">
		<result property="packageId" column="package_id"/>
		<result property="packageName" column="package_name"/>
		<result property="packageFee" column="package_fee"/>
	</resultMap>
	<resultMap class="com.***.cardlayout.dto.CardLayoutDTO" id="r_cardLayoutDTO">
		<result property="cardLayoutId" column="card_layout_id"/>
		<result property="cardName" column="card_name"/>
	</resultMap>
	<resultMap class="com.***.product.dto.ProdFaceValueDTO" id="r_prodFaceValueDTO">
		<result property="faceValueId" column="face_value_id"/>
		<result property="faceValue" column="face_value"/>
		<result property="faceValueType" column="face_value_type"/>
	</resultMap>
	<resultMap class="com.***.customer.dto.DeliveryPointDTO" id="r_deliveryPointDTO">
		<result property="deliveryPointId" column="delivery_point_id"/>
		<result property="deliveryPointName" column="delivery_point_name"/>
		<result property="recipientsStr" column="recipients_str"/>
	</resultMap>
	<resultMap class="com.***.customercontract.dto.CustContractDTO" id="r_custContractDTO">
		<result property="contractId" column="contract_id"/>
		<result property="cardFee" column="card_fee"/>
		<result property="annualFee" column="annual_fee"/>
		<result property="deliveryFee" column="delivery_fee"/>
	</resultMap>
	<resultMap class="com.***.customer.dto.InvoiceAddressDTO" id="r_invoiceAddressDTO">
		<result property="invoiceAddressId" column="invoice_address_id"/>
		<result property="invoiceAddress" column="invoice_address"/>
	</resultMap>
	<resultMap class="com.***.customer.dto.InvoiceCompanyDTO" id="r_invoiceCompanyDTO">
		<result property="invoiceCompanyId" column="invoice_company_id"/>
		<result property="invoiceCompanyName" column="invoice_company_name"/>
	</resultMap>
	
	
	<parameterMap class="java.util.HashMap" id="p_orderInput">
		<parameter property="o_products" resultMap="r_productDTO" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_product" resultMap="r_productDTO" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_accTypes" resultMap="r_accTypeDTO" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_cardLayouts" resultMap="r_cardLayoutDTO" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_packages" resultMap="r_packageDTO" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_prodFaceValues" resultMap="r_prodFaceValueDTO" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_custContracts" resultMap="r_custContractDTO" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_invoiceAddressList" resultMap="r_invoiceAddressDTO" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_invoiceCompanyList" resultMap="r_invoiceCompanyDTO" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_deliveryPointList" resultMap="r_deliveryPointDTO" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_orderDate" resultMap="r_batCtrl" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_sales" resultMap="TB_ENT_USER.abatorgenerated_UserResult" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_customerName" javaType="java.lang.String" jdbcType="VARCHAR" mode="OUT"/>
		<parameter property="o_serviceFee" javaType="java.math.BigDecimal" jdbcType="DECIMAL" mode="OUT"/>
		<parameter property="i_orderType" javaType="Integer" jdbcType="DECIMAL" mode="IN"/>
		<parameter property="i_customerId" javaType="Long" jdbcType="DECIMAL" mode="IN"/>
		<parameter property="i_productId" javaType="Long" jdbcType="DECIMAL" mode="IN"/>
		<parameter property="i_accTypeId" javaType="Short" jdbcType="DECIMAL" mode="IN"/>
		<parameter property="i_issuerId" javaType="Integer" jdbcType="DECIMAL" mode="IN"/>
		<parameter property="i_issuerGroupId" javaType="Integer" jdbcType="DECIMAL" mode="IN"/>
	</parameterMap>
	<parameterMap class="java.util.HashMap" id="p_orderEdit">
		<parameter property="o_customerOrder" resultMap="TB_ENT_CUSTOMER_ORDER.abatorgenerated_CustomerOrderResult" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_products" resultMap="r_productDTO" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_cardLayouts" resultMap="r_cardLayoutDTO" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_packages" resultMap="r_packageDTO" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_prodFaceValues" resultMap="r_prodFaceValueDTO" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_sales" resultMap="TB_ENT_USER.abatorgenerated_UserResult" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_accTypes" resultMap="r_accTypeDTO" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_invoiceAddressList" resultMap="r_invoiceAddressDTO" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_invoiceCompanyList" resultMap="r_invoiceCompanyDTO" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_deliveryPointList" resultMap="r_deliveryPointDTO" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT"/>
		<parameter property="o_customerName" javaType="java.lang.String" jdbcType="VARCHAR" mode="OUT"/>
		<parameter property="o_issuerName" javaType="java.lang.String" jdbcType="VARCHAR" mode="OUT"/>
		<parameter property="o_productName" javaType="java.lang.String" jdbcType="VARCHAR" mode="OUT"/>
		<parameter property="o_serviceFee" javaType="java.math.BigDecimal" jdbcType="DECIMAL" mode="OUT"/>
		<parameter property="i_orderType" javaType="Integer" jdbcType="DECIMAL" mode="IN"/>
		<parameter property="i_orderId" javaType="Long" jdbcType="DECIMAL" mode="IN"/>
		<parameter property="i_productId" javaType="Long" jdbcType="DECIMAL" mode="IN"/>
		<parameter property="i_accTypeId" javaType="Short" jdbcType="DECIMAL" mode="IN"/>
		<parameter property="i_issuerId" javaType="Integer" jdbcType="DECIMAL" mode="IN"/>
		<parameter property="i_issuerGroupId" javaType="Integer" jdbcType="DECIMAL" mode="IN"/>
	</parameterMap>
	
	<procedure id="RLOrderInput" parameterMap="p_orderInput">
		{call RLOrderInput(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}
	</procedure>
	<procedure id="CROrderInput" parameterMap="p_orderInput">
		{call CROrderInput(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}
	</procedure>
	<procedure id="GSTOrderInput" parameterMap="p_orderInput">
		{call GSTOrderInput(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}
	</procedure>
	<procedure id="GSLOrderInput" parameterMap="p_orderInput">
		{call GSLOrderInput(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}
	</procedure>
	
	<procedure id="RLOrderEdit" parameterMap="p_orderEdit">
		{call RLOrderEdit(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}
	</procedure>
	<procedure id="CROrderEdit" parameterMap="p_orderEdit">
		{call CROrderEdit(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}
	</procedure>
	<procedure id="GSTOrderEdit" parameterMap="p_orderEdit">
		{call GSTOrderEdit(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}
	</procedure>
	<procedure id="GSLOrderEdit" parameterMap="p_orderEdit">
		{call GSLOrderEdit(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}
	</procedure>

</sqlMap>

ORACLE 存儲過程

create or replace procedure RLOrderInput(
       o_products out sys_refcursor,
       o_product out sys_refcursor,
       o_accTypes out sys_refcursor,
       o_cardLayouts out sys_refcursor,
       o_packages out sys_refcursor,
       o_prodFaceValues out sys_refcursor,
       o_custContracts out sys_refcursor,
       o_invoiceAddressList out sys_refcursor,
       o_invoiceCompanyList out sys_refcursor,
       o_deliveryPointList out sys_refcursor,
       o_orderDate out sys_refcursor,
       o_sales out sys_refcursor,
       o_customerName out varchar,
       o_serviceFee out number,
       i_orderType in number,
       i_customerId in number,
       i_productId in number,
       i_accTypeId in number,
       i_issuerId in number,
       i_issuerGroupId in number) 
as 
       productId number;
begin
  productId := -1;
    --充值卡訂單:初始頁面查sales/orderDate,選擇客戶查客戶相關及產品列表第一個產品,改變產品查對應產品
    --三種狀態:無客戶號、有客戶號無產品號、有客戶號有產品號

      if i_customerId!=-1 then--選擇客戶或者改變產品查客戶
        begin
          getprodsbycustidandptype(o_products,i_customerId,1,1);
          getinvoicebycustid(o_invoiceAddressList,o_invoiceCompanyList,i_customerId,1);
          getdeliverybycustid(o_deliveryPointList,i_customerId,1);
          select t.customer_name into o_customerName from tb_ent_customer t where t.customer_id=i_customerId;
          
        end;
      end if;
      if i_customerId=-1 then--初始頁面不查客戶
        begin
          getprodsbycustidandptype(o_products,i_customerId,1,0);
          getinvoicebycustid(o_invoiceAddressList,o_invoiceCompanyList,i_customerId,0);
          getdeliverybycustid(o_deliveryPointList,i_customerId,0);
        end;
      end if;
     if i_customerId!=-1 and i_productId=-1 then--選擇客戶沒選擇產品後設置爲第一條產品
        begin
          select t2.product_id into productId 
                from tb_ent_cust_contract t1,tb_ent_product t2 
                where t1.product_id=t2.product_id and t1.customer_id=i_customerId and t2.product_type=1  
                and t2.data_state=1 and t1.data_state=1 and t2.prod_stat=1
                and nvl(t1.start_date,sysdate)<=sysdate and nvl(t1.end_date,sysdate)>=sysdate AND ROWNUM=1;
                
          EXCEPTION WHEN NO_DATA_FOUND THEN 
            NULL;
        end;
      end if; 
      if i_productId!=-1 then--產品列表下拉框改變產品設置爲該產品
        begin
          productId := i_productId;
        end;
      end if;
      if productId!=-1 then--產品列表下拉框改變產品查產品
        begin
          getprodfororderinput(o_product,productId,1);
          getcardlayoutsbyprodid(o_cardLayouts,productId,1);
          getpackagesbyprodid(o_packages,productId,1);
          getvalidcustcontract(o_custcontracts,i_customerId,productId,1);
        end;
      end if;
      if productId=-1 then--產品列表下拉框改變產品查產品
        begin
          getprodfororderinput(o_product,productId,0);
          getcardlayoutsbyprodid(o_cardLayouts,productId,0);
          getpackagesbyprodid(o_packages,productId,0);
          getvalidcustcontract(o_custcontracts,i_customerId,productId,0);
        end;
      end if;
      getcurrdateandsales(o_orderDate,o_sales,i_issuerId,i_issuerGroupId,1);
    getacctypesbyprodid(o_accTypes,productId,0);
    getprodfacevaluesbyprodid(o_prodFaceValues,productId,0);
 
end RLOrderInput;

其中調用了其他存儲過程

---------------------------------------------------------

注意事項::::::::::::::::::

IBATIS版本2.3.4

每個DTO都寫一個RESULTMAP,無奈吧,不用試了,沒別的好辦法

MYIBATIS配置XML文件似乎更方便一些,這裏只能如此

存儲過程中OUT遊標CURSOR要全部OPEN,不然JAVA異常‘CURSOR IS CLOSED....’

存儲過程難以看懂,維護麻煩,好處是快,這裏如果用DAO可能會訪問數據庫78次,所以存儲過程適用於訪問次數多的情況下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章