Я пытаюсь передать пользовательский тип (UDT) в качестве входного параметра в хранимую процедуру Oracle
Массив UDT - FILTER_EXPR_TBL :
CREATE OR REPLACE
TYPE schema.FILTER_EXPR_TBL AS TABLE OF schema.FILTER_EXPR_T
Член UDT - FILTER_EXPR_T :
CREATE OR REPLACE
TYPE schema.FILTER_EXPR_T AS OBJECT (
filter_name varchar2(50 CHAR),
Comparison_opr varchar2(50 CHAR),
Search_value clob,
logical_opr varchar2(30 CHAR)
)
Мой код Java для подготовки ввода для этой части UDT:
// Preparing filter_expr_t and adding it to an array
StructDescriptor StructDesc_Filterexpr = StructDescriptor.createDescriptor("schema.FILTER_EXPR_T", con);
Object[] ObjArray = new Object[4];
ObjArray[0] = "val1";
ObjArray[1] = "=";
oracle.jdbc.OracleClob clob = (oracle.jdbc.OracleClob) con.createClob();
clob.setString(1,"val2");
ObjArray[2] = clob;
ObjArray[3] = "";
STRUCT filter_expr = new STRUCT(StructDesc_Filterexpr, con, ObjArray);
STRUCT[] filter_expr_tbl = {filter_expr};
//Declaring filter_expr_tbl
ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor( "schema.FILTER_EXPR_TBL", con);
ARRAY array_to_pass = new ARRAY( descriptor, con, filter_expr_tbl);
, где 'con' - объект OracleConnection
Часть, в которой я добавляю ее в оператор вызова:
stmnt.setArray(1, array_to_pass);
Закрытие вопроса, когда я нашел решение.