PL / SQL对象成员函数 - java方法

时间:2015-04-11 16:08:57

标签: java oracle plsql oracle11g

我正在尝试使用成员函数调用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类型

  1. 00000 - "数据类型不一致:预期%s获得%s"
  2. *原因:
    *操作:

    我有红色http://docs.oracle.com/cd/B19306_01/java.102/b14187/chsix.htm#BABJJFJC 实际上是我发现的唯一信息。我不知道我错过了什么或做错了什么。

1 个答案:

答案 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);
  }
}