【问题标题】:PLS-00103 error when comping Oracle stored function编译 Oracle 存储函数时出现 PLS-00103 错误
【发布时间】:2011-01-21 10:43:39
【问题描述】:

给定以下使用 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 和存储函数的问题,它们接受和返回各种参数类型。

【问题讨论】:

  • 在我的XE 安装中没有Java,但是AFAIK,Java 关键字应该是小写的。尝试在NAME 子句中将RETURN 替换为return
  • @Quassnoi 请回复完整的答案,所以我对此表示赞赏:)

标签: oracle java-stored-procedures


【解决方案1】:

去掉函数声明中的空括号:

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

更新:

Java 关键字应为小写。尝试在NAME 子句中将RETURN 替换为return

【讨论】:

  • 我这样做了,我收到以下错误:Error(3,1): PLS-00311: the declaration of "grassie.example.Example.test() RETURN java.lang.String" is incomplete or malformed
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    函数定义应该像下面的代码,

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

    【讨论】:

    • 看来,答案已经被接受,你被复制了
    猜你喜欢
    • 2014-04-12
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    相关资源
    最近更新 更多