[英]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.