PLS-00103编写Oracle存储函数时出错
给定使用loadjava加载到数据库中的以下Java:PLS-00103编写Oracle存储函数时出错,oracle,java-stored-procedures,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 'gr
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';
为什么函数没有编译时出现以下错误
错误(3,1):PLS-00311:“grassie.example.example.test()RETURN java.lang.String”的声明不完整或格式错误
Oracle客户端是9.2.0.8.0,数据库是9.2.0.8.0。使用SQL Developer 2.1.0.63
编辑:根据下面的答案回答我的问题
为了进一步澄清,我创建了这个简单的测试类和函数,因为我遇到了更复杂的Java和存储函数的问题,这些函数接受并返回各种参数类型。如果函数没有参数,则不需要括号():
去掉函数声明中的空括号:
CREATE OR REPLACE FUNCTION TEST_FUNCTION RETURN VARCHAR2
AS LANGUAGE JAVA
NAME 'grassie.example.Example.test() RETURN java.lang.String';
更新:
Java
关键字应为小写。在NAME
子句中,尝试将RETURN
替换为RETURN
。函数定义应类似于以下代码
CREATE OR REPLACE FUNCTION NEMO_SCM.TEST_FUNCTION RETURN VARCHAR2
AS LANGUAGE JAVA
NAME 'grassie.example.Example.test() **return** java.lang.String';
如果这样做,我会得到以下错误:
error(3,1):PLS-00311:grassie.example.example.test()RETURN java.lang.String”的声明不完整或格式错误
在我的XE
安装中没有java
,但请注意,java关键字应该是小写的。在NAME
子句中,尝试将RETURN
替换为RETURN
。@Quassnoi请用完整的答案回答,因此我认为这是值得信任的:)看来,答案已经被接受,您的答案是重复的
CREATE OR REPLACE FUNCTION NEMO_SCM.TEST_FUNCTION RETURN VARCHAR2
AS LANGUAGE JAVA
NAME 'grassie.example.Example.test() **return** java.lang.String';