Функция в недопустимом состоянии: Oracle с Jdbc

#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 в конце моего жала. Я удалил их, и она успешно скомпилировалась. Большое спасибо.