Невозможно вызвать хранимую процедуру с помощью Spring JDBC

Мы не можем вызвать хранимую процедуру с помощью Spring JDBC. Ниже приведен фрагмент кода.

Procedure Signature

    PROCEDURE get_cash_details (
        p_org_id      IN      VARCHAR2,
        p_receipt_number  IN      VARCHAR2,
        p_result_type     IN      VARCHAR2,
        x_cash_detail     OUT     CASH_DETAIL_REC,
        x_error_msg   OUT     VARCHAR2
    );


The CASH_DETAIL_REC is of type STRUT returning a record type and 2 Arrays

Java-код:

public void callStoredProcedure(String receiptNumber, String orgId, String type) {
    CashDetailsProcedure procedure = new CashDetailsProcedure(jdbcTemplate);
    procedure.execute();
}

public class CashDetailsProcedure extends StoredProcedure {

    @Autowired
    JdbcTemplate jdbcTemplate;

    public CashDetailsProcedure(JdbcTemplate jdbcTemplate) {
        super(jdbcTemplate, "BPEL_LLPOCWRAPPER.XX_AR_CASHRCPT_RCV_PKG$GET_CA ");


        declareParameter(new SqlParameter("P_ORG_ID", OracleTypes.VARCHAR));
            declareParameter(new SqlParameter("P_RECEIPT_NUMBER", Types.VARCHAR));
        declareParameter(new SqlParameter("P_RESULT_TYPE", Types.VARCHAR));

        declareParameter(new SqlOutParameter("X_CASH_DETAIL", OracleTypes.STRUCT, "XX_AR_CASHRCPT_RX3372075X1X4", new ReceiptHandler()));
            declareParameter(new SqlOutParameter("X_ERROR_MSG", OracleTypes.VARCHAR));

            compile();   
    }

        public Map<String, Object> execute() {

            Map<String, Object> inParams = new HashMap<String, Object>();
            inParams.put("P_ORG_ID", "204");
        inParams.put("P_RECEIPT_NUMBER", "89067");
        inParams.put("P_RESULT_TYPE", "Summary");
            Map output = execute(inParams);
            return output;
        }

}

Сообщение об ошибке:

CallableStatementCallback; uncategorized SQLException for SQL 
[{call BPEL_LLPOCWRAPPER.XX_AR_CASHRCPT_RCV_PKG$GET_CA (?, ?, ?, ?, ?)}]; 
SQL state [null]; error code [17090]; operation not allowed: Ordinal binding
and Named binding cannot be combined!; nested exception is java.sql.SQLException:
operation not allowed: Ordinal binding and Named binding cannot be combined!

1 ответ

Вы можете определить свой простой запрос как

String query = "Select * from yourStoredProcedureName(?,?,?);"

и при вызове с использованием jdbcTemplate вы можете использовать два подхода подхода или без него. 1> jdbcTemplate.queryForObject(query,yourMapper, param1, param2, param3);2>

List<Map<String, Object>> rows = jdbcTemplate.queryForList(query, param1, param2, param3);
            for (Map<String, Object> row : rows) {
                System.out.println(row.get("firstName"));
}

второй метод дает оттуда строки, вы можете получить результаты для каждого столбца результатов.

Другие вопросы по тегам