SimpleJdbcCall - для параметра 1 не указано значение - PullRequest
0 голосов
/ 20 ноября 2019

Мы пытаемся перенести Oracle на Postgres, и в процессе я изменил параметр соединения с базой данных на Postgres.

Но я пытаюсь запустить тот же код, после чего получаю исключение:

Исключение в потоке "main" org.springframework.dao.DataIntegrityViolationException: CallableStatementCallback;SQL [{? = вызовить environment_management.get_connection_details_1 ()}];Не указано значение для параметра 1 .;вложенное исключение: org.postgresql.util.PSQLException: для параметра 1 не указано значение.

    static final String GET_APPLICATION_CONNECTIONS_FUNCTION = "get_connection_details";
    static final String APPLICATION_CONNECTIONS_RESULT_SET = "lv_conn_record";

    this.getApplicationConnectionsFunction = createSimpleJdbcCallForFunction(ENVIRONMENT_MANAGEMENT_CATALOG, GET_APPLICATION_CONNECTIONS_FUNCTION);

    this.getApplicationConnectionsFunction.returningResultSet(APPLICATION_CONNECTIONS_RESULT_SET,
            new ConnectionRowMapper());




    Map<String, Object> applicationConnectionsResultMap =  
    getApplicationConnectionsFunction.execute();

Если я также предоставляю неправильное имя функции, то он также выдает ту же ошибку. Это означает, что он вообще не достигает базы данных Postgres и выдает ошибку до этого. В функции postgres у нас нет входного параметра, но есть refcursor в качестве выходного.

1 Ответ

0 голосов
/ 02 декабря 2019

Я использовал следующее, и это сработало

   this.jdbcCall = new SimpleJdbcCall(dataSource).withSchemaName("environment_management").withFunctionName("get_connection_details").withoutProcedureColumnMetaDataAccess()
            .declareParameters(
                    new SqlOutParameter("lv_conn_record",  Types.OTHER),
                    new SqlParameter("p_application_name", Types.VARCHAR));


    SqlParameterSource in = new MapSqlParameterSource().addValue("lv_conn_record", Types.REF_CURSOR)
         .addValue("p_application_name", applicationName);

    Map<String, Object> applicationConnectionsResultMap = jdbcCall.execute(in);
...