Хранимая функция / процедура Oracle с VARRAY или пользовательским типом в качестве параметра IN - PullRequest
0 голосов
/ 08 декабря 2009

Я определил 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;

Можно ли создать хранимую функцию / процедуру Java, которая принимает VARRAY или пользовательский тип в качестве параметра IN?

Если это возможно, что я должен заменить "??????" с:

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";
    }
}

1 Ответ

0 голосов
/ 08 декабря 2009

Отвечая на мой собственный вопрос. Вот решение, которое сработало для меня.

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...