【发布时间】:2011-11-27 15:49:06
【问题描述】:
假设我的 UDO(用户定义对象)是:
create or replace
TYPE UDO_PERSON AS object (NAME VARCHAR2(100), AGE INTEGER);
我有一个 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;
我测试了以下方法并且它有效,并且有一些方法可以“解析”结果
...
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());
}
...
但我想使用的是CallableStatement,例如:
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);
...
所以最后一段代码会根据我使用的java.sql.Type、execute 方法的类型抛出不同类型的异常。
有人吗?我搜索了 Oracle 文档,但发现它非常混乱。
【问题讨论】:
-
在系统允许的情况下(我相信最早是发帖后的8小时),请将问题的答案从你的问题中删除,并作为真实答案重新发布。