decir que mi UDO (objeto de usuario definido) es:¿Cómo llamo por JDBC una función PL/SQL que devuelve un UDO e interpreta ese resultado?
create or replace
TYPE UDO_PERSON AS object (NAME VARCHAR2(100), AGE INTEGER);
Y tengo una función PL/SQL
create or replace
FUNCTION CREATE_A_PERSON(NAME VARCHAR2)
RETURN UDO_PERSON
AS
AGE INTEGER;
BEGIN
SELECT dbms_random.value(1,100) INTO AGE FROM DUAL;
RETURN NEW UDO_PERSON(NAME, AGE);
END CREATE_A_PERSON;
Probé el siguiente método y funciona, y hay maneras de 'PARSE 'el resultado
...
String select = "SELECT CREATE_A_PERSON('my name') FROM DUAL";
Statement stmt=conn.createStatement();
ResultSet rs= stmt.executeQuery(select);
rs.next();
java.sql.Struct jdbcStruct = (java.sql.Struct)rs.getObject(1);
Object[] attrs = jdbcStruct.getAttributes();
for(int i=0;i<attrs.length;i++){
System.out.println("attrs["+i+"] "+attrs[i].toString());
}
...
Pero lo que yo quiero usar es un CallableStatement
como:
String procedure = "{? = call CREATE_A_PERSON (?)}";
CallableStatement statement = conn.prepareCall(procedure);
statement.registerOutParameter(1, java.sql.Types.STRUCT); // I tested with OTHER, JAVA_OBJECT
statement.setString(2, "Youre name");
ResultSet rs= statement.executeQuery(); // tried also with execute() and then statement.getObject()...still nothing
java.sql.Struct jdbcStruct = (java.sql.Struct)rs.getObject(1);
...
Así que este último fragmento de código arroja diferentes tipos de excepción dependiendo del java.sql.Type
que uso, el tipo de método de ejecución.
¿Alguien? Busqué en los documentos de Oracle, pero me resulta muy confuso.
Cuando el sistema lo permita (creo que son las primeras 8 horas después de haber publicado la pregunta), elimine la respuesta de su pregunta y vuelva a publicarla como una respuesta real. – BalusC