簡體   English   中英

如何從java hibernate調用具有6個輸入參數和6個輸出參數的Oracle存儲過程?

[英]How to call a Oracle stored procedure from java hibernate with 6 input parameters and 6 output parametrs?

我正在擴展spring框架的StoredProcedure類,我不知道如何設置輸入參數和輸出參數!

package com.test.schedular.dao;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import oracle.jdbc.driver.OracleTypes;

import org.hibernate.type.StandardBasicTypes;
import org.hibernate.type.Type;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.object.StoredProcedure;
import org.springframework.stereotype.Repository;

import com.mobicule.customer.bean.CustomerTransaction;
@Repository
public class CustomerTransactionSchedularDao extends StoredProcedure implements ICustomerTransactionSchedularDao
{
    @Autowired
    SessionFactory sessionFactory;

    private static final String SPROC_NAME = "procedure_name";

    CustomerTransactionSchedularDao(DataSource dataSource)
    {
        super(dataSource, SPROC_NAME);
        declareParameter(new SqlOutParameter("v_dedup_key1", OracleTypes.VARCHAR));
        declareParameter(new SqlOutParameter("v_dedup_key2", OracleTypes.VARCHAR));
        declareParameter(new SqlOutParameter("v_dedup_key3", OracleTypes.VARCHAR));
        declareParameter(new SqlOutParameter("v_dedup_key4", OracleTypes.VARCHAR));
        declareParameter(new SqlOutParameter("v_dedup_key6", OracleTypes.VARCHAR));
        declareParameter(new SqlOutParameter("v_dedup_key7", OracleTypes.VARCHAR));
        declareParameter(new SqlParameter("v_first_name", OracleTypes.VARCHAR));
        declareParameter(new SqlParameter("v_last_name", OracleTypes.VARCHAR));
        declareParameter(new SqlParameter("v_mother_maiden_name", OracleTypes.VARCHAR));
        declareParameter(new SqlParameter("v_dob", OracleTypes.VARCHAR));
        declareParameter(new SqlParameter("v_realted_corp_party_id", OracleTypes.VARCHAR));
        declareParameter(new SqlParameter("v_req_effective_date", OracleTypes.VARCHAR));
        compile();
    }
    @Override
    public void callSyn_P_Get_Dedup_Key(CustomerTransaction customerTransaction) 
    {
        Session session = sessionFactory.openSession();
        /*Query query = session.createSQLQuery("CALL syn_p_get_dedup_key(:v_first_name, :v_last_name, :v_mother_maiden_name,"
                + ":v_dob, :v_realted_corp_party_id, :v_req_effective_date )"
                + " :v_dedup_key1,:v_dedup_key2,:v_dedup_key3,:v_dedup_key4,:v_dedup_key6,:v_dedup_key7)")
                .addScalar("v_dedup_key1", StandardBasicTypes.STRING )
                .addScalar("v_dedup_key2", StandardBasicTypes.STRING )
                .addScalar("v_dedup_key3", StandardBasicTypes.STRING )
                .addScalar("v_dedup_key4", StandardBasicTypes.STRING )
                .addScalar("v_dedup_key6", StandardBasicTypes.STRING )
                .addScalar("v_dedup_key7", StandardBasicTypes.STRING )
                .setParameter("v_first_name", customerTransaction.getFirstName())
                .setParameter("v_last_name", customerTransaction.getLastName())
                .setParameter("v_mother_maiden_name",customerTransaction.getMothersMaidenName())
                .setParameter("v_dob", customerTransaction.getDateOfBirth())
                .setParameter("v_realted_corp_party_id", null)
                .setParameter("v_req_effective_date", null);*/
        Map<String, Object> inParams = new HashMap<String, Object>(2);
        inParams.put("v_first_name", "");
        inParams.put("v_last_name", "");
        inParams.put("v_mother_maiden_name", "");
        inParams.put("v_dob","");
        inParams.put("v_realted_corp_party_id", "");
        inParams.put("v_req_effective_date", "");
        Map<String,Object> m = execute(inParams);
        System.out.println(m);          
            /*List result = query.list();
            System.out.println(result);*/

    }



}

如何在其語法中具有6個輸入和6個輸出參數的hibernate中調用存儲過程?

首先是StoredProcedure一個Spring類,而不是一個Hibernate類。

final Map<String, Object> inParams = new HashMap<String, Object>(6);
inParams.put("v_first_name", "");
inParams.put("v_last_name", "");
inParams.put("v_mother_maiden_name", "");
inParams.put("v_dob","");
inParams.put("v_realted_corp_party_id", "");
inParams.put("v_req_effective_date", "");
final Map<String, Object> result = execute(inParams);

System.out.println("v_dedup_key1 = [" + result.get("v_dedup_key1") + ']');
System.out.println("v_dedup_key2 = [" + result.get("v_dedup_key2") + ']');
System.out.println("v_dedup_key3 = [" + result.get("v_dedup_key3") + ']');
System.out.println("v_dedup_key4 = [" + result.get("v_dedup_key4") + ']');
System.out.println("v_dedup_key5 = [" + result.get("v_dedup_key5") + ']');
System.out.println("v_dedup_key6 = [" + result.get("v_dedup_key6") + ']');

您是否嘗試過執行這樣的代碼?

在休眠狀態

            String v_param_1 = "param_1";
            SessionImpl session = (SessionImpl) sessionFactory.openSession();
            CallableStatement callableStatement = session.connection().prepareCall("call P_MYSTORE(?,?)");
            callableStatement.setString(1, v_param_1);
            callableStatement.registerOutParameter(2, OracleTypes.VARCHAR);
            callableStatement.execute();
            //get out param from store
            String v_param_2 = callableStatement.getString(2);

在oracle中存儲過程

CREATE OR REPLACE PROCEDURE P_MYSTORE(p_in_1 in varchar2, p_out_1 out varchar2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM