#java #oracle #jdbc
#java #Oracle #jdbc
Вопрос:
У меня есть запрос в строке java. Что мне нужно сделать, так это запустить этот запрос с помощью jdbc. Запрос выполнен:
String strQuery= " CREATE OR REPLACE FUNCTION GET_CLOSE_DATE ( PARAM_DOCUMENT_ID IN NUMBER )
RETURN DATE AS
V_CLOSE_DATE DATE;
BEGIN
SELECT MAX(TOP_LEVEL_ELEMENT.CLOSE_DATE_TIME) INTO V_CLOSE_DATE
FROM TOP_LEVEL_ELEMENT WHERE TOP_LEVEL_ELEMENT.DOCUMENT_ID = PARAM_DOCUMENT_ID;
RETURN V_CLOSE_DATE;
END GET_CLOSE_DATE;";
Я использую JDBC
Statement stmt = con.createStatement();
stmt.executeUpdate(strQuery);
Запрос выполняется успешно, но когда я пытаюсь использовать эту функцию, она выдает исключение, в котором говорится, что функция GET_CLOSE_DATE находится в недопустимом состоянии. Я также пробовал запускать
alter function GET_CLOSE_DATE compile;
сразу после запуска запроса create function. Оба выполняются успешно, но функция по-прежнему остается в недопустимом состоянии. Пожалуйста, предложите несколько решений.
Ответ №1:
Попробуйте эту команду, чтобы увидеть, какие ошибки связаны с этой функцией, если какие-либо:
SELECT *
FROM user_errors
WHERE name = 'GET_CLOSE_DATE';
Редактировать:
Это могут быть встроенные CR / LF в вашей строке. Попробуйте объединить вашу строку SQL, как в:
String strQuery= " CREATE OR REPLACE FUNCTION GET_CLOSE_DATE ( PARAM_DOCUMENT_ID IN"
" NUMBER) RETURN DATE AS "
" V_CLOSE_DATE DATE "
...
Комментарии:
1. Выдает сообщение об ошибке в виде:PLS-00103: Обнаружен символ «» при ожидании одного из следующих: запустить пакет функций, тип подтипа процедуры pragma, использовать <идентификатор> <идентификатор с разделителями в двойных кавычках> сформировать текущий курсор на внешнем языке
2. у вас есть какие-либо подсказки относительно этого?
3. Какой номер строки он сообщил?
4. Вы правильно подозревали, у меня был CR / LF в конце моего жала. Я удалил их, и она успешно скомпилировалась. Большое спасибо.