我正在尝试使用成员函数调用java方法创建一个oracle对象。它必须是成员函数,而不是静态函数。
Java类:
Create or Replace Java Source Named "Hello" As
public class Hello {
public String World() { return "Hello World!"; }
}
对象:
Create or replace type T_HelloW as object(
helloID int,
member function HelloWorld return varchar2 as
language java name 'Hello.World() return java.lang.String');
表创建和数据插入:
create table hellos of T_HelloW;
insert into hellos values(1);
但是当我试着打电话时:
select h.HelloWorld() from hellos h;
我收到错误:
ORA-00932:不一致的数据类型:期望位置1的IN参数是可转换为用户定义的Java类实例的Oracle类型的实例,它获得了无法转换为java类的Oracle类型
*原因:
*操作:
我有红色http://docs.oracle.com/cd/B19306_01/java.102/b14187/chsix.htm#BABJJFJC 实际上是我发现的唯一信息。我不知道我错过了什么或做错了什么。
答案 0 :(得分:1)
解决方案正如Sylvain Leroux建议的那样。不得不实现SQLData接口:
Create or Replace Java Source Named "Hello" As
import java.sql.*;
import java.io.*;
public class Hello implements SQLData {
private int helloId;
public String World() { return "Hello World!"; }
String sql_type;
public String getSQLTypeName() throws SQLException {
return sql_type;
}
public void readSQL(SQLInput stream, String typeName) throws SQLException {
sql_type = typeName;
helloId = stream.readInt();
}
public void writeSQL(SQLOutput stream) throws SQLException {
stream.writeInt(helloId);
}
}