Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PL/SQL对象成员函数-java方法_Java_Oracle_Plsql_Oracle11g - Fatal编程技术网

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

PL/SQL对象成员函数-java方法,java,oracle,plsql,oracle11g,Java,Oracle,Plsql,Oracle11g,我正在尝试创建一个oracle对象,其成员函数调用java方法。它必须是成员函数,而不是静态函数 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 funct

我正在尝试创建一个oracle对象,其成员函数调用java方法。它必须是成员函数,而不是静态函数

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类型的实例。获取的Oracle类型无法转换为Java类

  • 00000-“不一致的数据类型:应为%s获得%s”
  • *原因:
    *行动:

    我有红色的
    事实上,这是我找到的唯一信息。我看不出我遗漏了什么或做错了什么。

    解决方案正如Sylvain Leroux所建议的那样。Had必须实现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);
      }
    }
    

    这是我以前从来没有做过的事情,所以我不能给你适当的建议,但是你把医生读到最后了吗?特别是?我不是100%确定,但我认为这与问题无关。正如它所说的——为了使对对象属性的访问更自然,创建一个实现SQLData接口的Java类。在这种情况下,我甚至不需要访问对象属性。@SylvainLeroux对不起,就是这样。尽管我不完全理解为什么我需要在这种情况下实现它。@John-请重新编辑您的问题。删除“解决方案”部分并将其作为答案发布。StackOverflow是一个问答网站;因此,它重视问题和答案。发布并接受您自己问题的答案是完全合法的。但是如何返回嵌套对象呢?