Ошибка PLS-00103 при компиляции хранимой функции Oracle - PullRequest
1 голос
/ 26 февраля 2010

Имеется следующий Java, который загружается в базу данных с помощью loadjava:

package grassie.example;

public class Example {

    public static String test(){
        return "Hello World!";
    }
}

И с учетом следующей хранимой функции Oracle:

CREATE OR REPLACE FUNCTION TEST_FUNCTION RETURN VARCHAR2
AS LANGUAGE JAVA
NAME 'grassie.example.Example.test() RETURN java.lang.String';

Почему функция не компилируется со следующей ошибкой?

Error(3,1): PLS-00311: the declaration of "grassie.example.Example.test() RETURN java.lang.String" is incomplete or malformed

Клиент Oracle - 9.2.0.8.0, база данных - 9.2.0.8.0. Использование SQL Developer 2.1.0.63

edit: исправил мой вопрос, основываясь на ответах ниже.

Чтобы уточнить, я создал этот простой тестовый класс и функцию, потому что у меня проблемы с более сложными Java и хранимыми функциями, которые принимают и возвращают различные типы параметров.

Ответы [ 2 ]

2 голосов
/ 26 февраля 2010

Избавьтесь от пустых скобок в объявлении функции:

CREATE OR REPLACE FUNCTION TEST_FUNCTION RETURN VARCHAR2
AS LANGUAGE JAVA
NAME 'grassie.example.Example.test() RETURN java.lang.String';

Обновление:

Java ключевые слова должны быть строчными. Попробуйте заменить RETURN на return в предложении NAME.

1 голос
/ 26 февраля 2010

если функция не имеет параметров, вам не нужны скобки ():

SQL> CREATE OR REPLACE FUNCTION TEST_FUNCTION() RETURN NUMBER AS
  2  BEGIN
  3     RETURN 0;
  4  END;
  5  /

Warning: Function created with compilation errors

SQL> CREATE OR REPLACE FUNCTION TEST_FUNCTION RETURN NUMBER AS
  2  BEGIN
  3     RETURN 0;
  4  END;
  5  /

Function created
...