Неверный оператор SQL с CallableStatement во время вызова Prored c - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть код ниже для вызова хранимой процедуры с определенными параметрами.

Однако она не работает на callableStatement.execute(); с ошибкой:

java.sql.SQLSyntaxErrorException: ORA-00900: invalid SQL statement

public void setContext(String userId, String someId, List<String> accountsList) {
        List<SqlParameter> parameters = Collections.singletonList(new SqlInOutParameter("output", Types.VARCHAR));
        log.info("executing stored procedure with user id: {}", userId);
        Map<String, Object> t =  defaultTemplate.call(connection -> {
            CallableStatement callableStatement = connection.prepareCall("STORED_PROC(?, ?, ?, ?)");
            callableStatement.setString(1, userId);
            callableStatement.registerOutParameter(2, Types.VARCHAR);
            callableStatement.setString(3, someId);
            OracleConnection oracleConnection = connection.unwrap(OracleConnection.class);
            Array array = oracleConnection.createOracleArray("SOME_TYPE", accountsList.toArray());
            callableStatement.setArray(4, array);
            callableStatement.execute();
            return callableStatement;
        }, parameters);
        log.info("Status of the stored procedure: {}", t.get("status_output"));
 }

Что я делаю неправильно?

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

Можете ли вы просто написать call оператор при вызове вашей процедуры

CallableStatement callableStatement = connection.prepareCall("{call STORED_PROC(?, ?, ?, ?)}");
1 голос
/ 07 апреля 2020
CallableStatement callableStatement = connection.prepareCall("STORED_PROC(?, ?, ?, ?)");

Поместите {} вокруг аргумента. И добавьте вызов перед оператором. Как ниже:

CallableStatement callableStatement = connection.prepareCall("{call STORED_PROC(?, ?, ?, ?)}");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...