Ошибка ORA-00900 при вызове функции Oracle из Java - PullRequest
1 голос
/ 15 октября 2019

Я получаю ошибку ORA-00900 при попытке вызова функции Oracle из кода, тогда как она работает из sqldeveloper. Код, из которого я пытаюсь вызвать функцию Oracle, приведен ниже.

        passwordCriteria = session.doReturningWork(connection -> {
            try (CallableStatement function = connection
                    .prepareCall("{ ? = call test$ui_mob.password_change (?,?,?,?) }")) {
                function.setEscapeProcessing(false);
                function.registerOutParameter("p_response", Types.VARCHAR);
                function.setString("p_username", "TEST_USER");
                function.setString("p_companycode", "BSH");
                function.setString("p_deviceid", "123456798");
                function.setString("p_language", "en");
                function.executeQuery();
                return function.getString(1);
            }
        });
    }

, а трассировка стека

. Причина: java.sql.SQLSyntaxErrorException: ORA-00900: неверноОператор SQL

1 Ответ

0 голосов
/ 15 октября 2019

Согласно JavaDoc :

Интерфейс, используемый для выполнения хранимых процедур SQL. JDBC API предоставляет синтаксис экранирования SQL хранимых процедур, который позволяет стандартным образом вызывать хранимые процедуры для всех СУБД. Этот escape-синтаксис имеет одну форму, которая включает в себя параметр результата, а другую - нет. Если используется, параметр результата должен быть зарегистрирован как параметр OUT. Другие параметры могут быть использованы для ввода, вывода или обоих. Параметры указываются последовательно, по номеру, причем первый параметр равен 1.

{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}

{call <procedure-name>[(<arg1>,<arg2>, ...)]}

Похоже, не должно бытьпробелы между {?=, а у вас есть пробелы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...