Ошибка PLS-00103 при компиляции хранимой функции Oracle

Учитывая следующую 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

изменить: исправлен мой вопрос на основе ответов ниже.

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


person Stuart Grassie    schedule 26.02.2010    source источник
comment
В моей установке XE нет Java, но, насколько я знаю, ключевые слова Java должны быть строчными. Попробуйте заменить RETURN на return в предложении NAME.   -  person Quassnoi    schedule 26.02.2010
comment
@Quassnoi, пожалуйста, ответьте полным ответом, поэтому я отдаю вам должное за это :)   -  person Stuart Grassie    schedule 26.02.2010


Ответы (3)


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

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

Обновление:

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

person Quassnoi    schedule 26.02.2010
comment
Я делаю это, я получаю следующую ошибку: Error(3,1): PLS-00311: the declaration of "grassie.example.Example.test() RETURN java.lang.String" is incomplete or malformed - person Stuart Grassie; 26.02.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
person Vincent Malgrat    schedule 26.02.2010

Определение функции должно быть похоже на приведенные ниже коды,

CREATE OR REPLACE FUNCTION NEMO_SCM.TEST_FUNCTION RETURN VARCHAR2
AS LANGUAGE JAVA
NAME 'grassie.example.Example.test() **return** java.lang.String';
person Δημήτρης Σαράντης    schedule 18.11.2019
comment
похоже ответ уже принят и вы его продублировали - person Avid Programmer; 18.11.2019