2009-12-07 61 views
0

我已经定义了一个用户定义类型的VARRAY如此过程:Oracle存储功能/与VARRAY或用户定义的类型作为IN参数

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

java.sql.STRUCT:http://www.oracle.com/technology/sample_code/tech/java/codesnippet/jdbc/objects/ObjectTypes.html – nayakam 2009-12-07 22:20:26

+0

把它作为一个答案,请,所以这问题看起来没有答案。 – jva 2009-12-08 07:53:49

回答

0

回答我自己的问题。这是为我工作的解决方案。

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; 
    } 
} 
相关问题