简体   繁体   English

使用 VARRAY 或用户定义类型作为 IN 参数的 Oracle 存储函数/过程

[英]Oracle stored function/procedure with VARRAY or user-defined type as IN parameter

I've defined VARRAY of a user-defined type such as this :我已经定义了用户定义类型的 VARRAY,例如:

CREATE OR REPLACE TYPE TEST_T  AS OBJECT 
  (C1 VARCHAR2(20 BYTE), C2 VARCHAR2 (11 Byte));
CREATE OR REPLACE TYPE ARRAY_TEST_T AS VARRAY(200) OF TEST_T;

Is it possible to create a java stored function/procedure that accepts VARRAY or user-defined type as IN parameter ?是否可以创建一个接受 VARRAY 或用户定义类型作为 IN 参数的 java 存储函数/过程?

If it is possible what should I replace "??????"如果可能的话,我应该用什么替换“??????” with :和 :

CREATE OR REPLACE FUNCTION FOOBAR (p1 IN ?????? )
RETURN VARCHAR2 AUTHID CURRENT_USER AS
LANGUAGE JAVA
NAME 'foobar.FoobarFunction.test_function(?????? array) return java.lang.String';


package foobar;
public class FoobarFunction {
    public static String test_function(?????? array) {
        return "ok";
    }
}

Answering my own question.回答我自己的问题。 Here is the solution that worked for me.这是对我有用的解决方案。

CREATE OR REPLACE FUNCTION FOOBAR (p1 IN ARRAY_TEST_T ) 
RETURN VARCHAR2 AUTHID CURRENT_USER AS
LANGUAGE JAVA
NAME 'foobar.FoobarFunction.test_function(java.sql.Array)
      return lava.lang.String';


package foobar;
public class FoobarFunction {
    public static String test_function(java.sql.Array array) {
        final Object[] content = (Object[]) array.getArray();
        for (Object c : content) {
                // expecting java.sql.Struct type for c;

                // get TEST_T attribute values for c1 and c2
                final Object[] attrs = ((java.sql.Struct) c).getAttributes();
                String c1 = (String) attrs[0];
                String c2 = (String) attrs[1];
            .......
        }

        return null;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在java中调用包含用户定义类型的oracle存储过程? - How to call oracle stored procedure which include user-defined type in java? 将String数组传递给具有string_varray类型的Oracle存储过程 - Passing String array into Oracle stored procedure with string_varray type 如何将用户定义的类型作为输入传递给存储过程? - How do I pass a user-defined type as an input to a stored procedure? 使用 JDBC 将用户定义的表类型传递给 SQL Server 存储过程 - Passing a user-defined table type to a SQL Server stored procedure using JDBC SQL4306N Java 存储过程或用户定义函数无法调用 Java 方法 - SQL4306N Java stored procedure or user-defined function could not call Java method Java 存储过程或用户定义 function 无法调用 Java 方法 - Java stored procedure or user-defined function could not call Java method 如何使用JDBC / Spring调用Oracle存储过程,其中一些参数类型是用户定义的? - How can I call an Oracle stored procedure with JDBC/Spring where some of the parameter types are user defined? 为用户定义的Oracle表类型编写MyBatis3 TypeHandler - Writing MyBatis3 TypeHandler for User-Defined Oracle Table Type 将用户定义的列表从休眠传递到oracle存储过程 - Passing user defined list from hibernate to oracle stored procedure 如何修复为 jOOQ 中的 INPUT 参数生成正确的值类型,以便使用<forcedtype>标签?</forcedtype> - How to fix generating proper value type for INPUT parameter in jOOQ for generated user-defined PL/pgSQL function using <forcedType> tag?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM