Обычно для определенного пользователем типа я могу просто сделать следующее (упрощенный, но функциональный пример):
//Create table
create type myType1 as object( a char(2), b char(2) );
create type myTable1 as table of myType1;
//Java code
ArrayDescriptor des = ArrayDescriptor.createDescriptor( "MYTABLE1", con);
StructDescriptor sDes = StructDescriptor.createDescriptor( des.getBaseName(), con);
//Populte the metadata
String columnName = sDes.getColumnName(0);
int oracleType = sDes.getColumnType(0);
int maxSize = sDes.getColumnDisplaySize(0);
boolean isNullable = sDes.isNullable(0)>0;
За исключением того, что теперь у меня есть таблица, которая определена с примитивным типом вместо структуры, и я не могу получить доступ к метаданным. Мой текущий код:
//Create table
create or replace type myTable2 as table of char(2);
//Java code
ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor( "MYTABLE2", con);
//This next line would throw an exception, as CHAR type is not a structure
//StructDescriptor sDes = StructDescriptor.createDescriptor( des.getBaseName(), con);
//Populte the metadata
int oracleType = descriptor.getBaseType(); // This Works
String columnName = "COLUMN_VALUE"; // This Works (I think)
int maxSize = ???? // How do I access the '2'?
boolean isNullable = ???? // How do I access isNullable?