복붙노트

[SPRING] 어떻게 스프링을 사용하여 출력 매개 변수로 심판 커서 저장 프로 시저를 호출?

SPRING

어떻게 스프링을 사용하여 출력 매개 변수로 심판 커서 저장 프로 시저를 호출?

내가 좋아하는 몸을 가진 저장 프로 시저를 가지고있다 -

무수 PROC_NAME (VARCHAR2에 PARAM1, VARCHAR2 PARAM2에, CURSOR_TYPE을 results_cursor OUT);

결과의 각 행은 특정 사용자 정의 된 클래스의 인스턴스에 해당한다.

어떻게 봄이를 호출 할 수 있습니다. 나는 구글과 유래를 많이 겪었지만 적절한 답을 찾을 수 없습니다.

그 누구도 날이에 대한 해결책을 제공하십시오 수 있습니다. 미리 감사드립니다.

해결법

  1. ==============================

    1.여기에 내가이 StackOverflow의 질문과 봄 문서를 기반으로 함께 넣어 뭔가 :

    여기에 내가이 StackOverflow의 질문과 봄 문서를 기반으로 함께 넣어 뭔가 :

    import java.sql.Types;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.sql.DataSource;
    
    import oracle.jdbc.OracleTypes;
    import org.springframework.jdbc.core.SqlOutParameter;
    import org.springframework.jdbc.core.SqlParameter;
    import org.springframework.jdbc.object.StoredProcedure;
    
    public class SampleStoredProcedure extends StoredProcedure {
    
        public SampleStoredProcedure(DataSource dataSource) {
            super(dataSource, "PROC_NAME");
            declareParameter(new SqlParameter("param1", Types.VARCHAR));
            declareParameter(new SqlParameter("param2", Types.VARCHAR));
            declareParameter(new SqlOutParameter("results_cursor", OracleTypes.CURSOR, new SomeRowMapper()));
            compile();
        }
    
        public Map<String, Object> execute(String param1, String param2) {
            Map<String, Object> inParams = new HashMap<>();
            inParams.put("param1", param1);
            inParams.put("param2", param2);
            Map output = execute(inParams);
            return output;
        }
    }
    

    저장 프로 시저가 다른 스키마 또는 패키지에있는 경우, 당신은 위의 저장 프로 시저의 이름을 조정해야합니다. 또한, SomeRowMapper 대신에 사용하는 행 매퍼를 지정해야합니다.

    를 호출하려면 :

        DataSource dataSource = ... ; // get this from somewhere
        SampleStoredProcedure sp = new SampleStoredProcedure(dataSource);
        Map<String, Object> result = sp.execute("some string", "some other string");
        // Do something with 'result': in particular, result.get("results_cursor")
        // will be the list of objects returned
    

    또는, SimpleJdbcCall을 사용할 수 있습니다 :

        DataSource dataSource = ... ; // get this from somewhere
        SimpleJdbcCall jdbcCall = new SimpleJdbcCall(dataSource);
        Map<String, Object> result =
            jdbcCall.withProcedureName("PROC_NAME")
                .declareParameters(
                        new SqlParameter("param1", Types.VARCHAR),
                        new SqlParameter("param2", Types.VARCHAR),
                        new SqlOutParameter("results_cursor", OracleTypes.CURSOR, new SomeRowMapper()))
                .execute("some string", "some other string");
    

    저장 프로 시저가 패키지에있는 경우, 당신은 줄을 추가해야합니다

                .withCatalogName("PACKAGE_NAME")
    

    jdbcCall의 설정에. 그것은 다른 스키마에 있다면 마찬가지로, 당신은 추가해야합니다

                .withSchemaName("SCHEMA_NAME")
    
  2. ==============================

    2.한 번 모습을 찾아 보게하세요. 목록 userData에;

    한 번 모습을 찾아 보게하세요. 목록 userData에;

        SimpleJdbcCall  executor = new SimpleJdbcCall(jdbcTemplate)
                                    .withProcedureName("SP_CL_USERPKS_FOLDER").withoutProcedureColumnMetaDataAccess()
                                    .declareParameters(
                                        new SqlParameter("INparam1", Types.INTEGER),
                                        new SqlParameter("INparam2", Types.VARCHAR),
                                        new SqlOutParameter("OUTParam1", OracleTypes.CURSOR),
                                        new SqlOutParameter("OUTParam2", OracleTypes.VARCHAR));
        executor.compile();
        SqlParameterSource param = new MapSqlParameterSource()
                .addValue("INparam1", loginPk)
                .addValue("INparam2", email);
    
        Map map = executor.execute(param);
        userData = (List<Map>) map.get("OUTParam1");
        String msg = (String) map.get("OUTParam2");
    
  3. from https://stackoverflow.com/questions/43045032/how-to-call-a-stored-procedure-with-ref-cursor-as-an-output-parameter-using-spri by cc-by-sa and MIT license