在编译Oracle存储函数时出现PLS-00103错误

时间:2010-02-26 12:47:16

标签: oracle java-stored-procedures

考虑使用loadjava加载到数据库中的以下Java:

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和存储函数的问题,这些函数接受并返回各种参数类型。

3 个答案:

答案 0 :(得分:2)

删除函数声明中的空括号:

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 :(得分:1)

如果函数没有参数,则不需要括号():

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

答案 2 :(得分:0)

函数定义应类似于以下代码,

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