You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-java@ibatis.apache.org by Jan Vissers <Ja...@cumquat.nl> on 2005/01/05 11:21:49 UTC
Re: IBatis and Oracle stored functions - strongly typed cursors
Ok,
Got a weakly typed cursor function (sys_refcursor Oracle9i
functionality) working now. Thanks to Jerome.
Instead of using javax.servlet.jsp.jstl.sql.Result I used
*oracle.jdbc.rowset.OracleCachedRowSet* which is available for the 10g
jdbc drivers.
public Object getResult(ResultGetter getter) throws SQLException {
OracleCachedRowSet cachedResult = new OracleCachedRowSet();
ResultSet rs = null;
try {
rs = (ResultSet)getter.getObject();
cachedResult.populate(rs);
} finally {
rs.close();
}
return cachedResult;
}
In this case a stored function is called to insert a record, for example:
function insert_person
(name in varchar2
,lastname in varchar2
,age in number
)
return sys_refcursor
To get this 'weak' cursor back-into bean mode I do:
Map parameters = new HashMap(4);
parameters.put("name","Jan");
parameters.put("lastname","Vissers");
parameters.put("age",new Integer(34));
sql.insert("insertPersonPck",parameters);
OracleCachedRowSet dataInserted =
(OracleCachedRowSet)parameters.get("result");
Map properties = new HashMap();
ResultSetMetaData md = dataInserted.getMetaData();
int cols = md.getColumnCount();
if (dataInserted.next()) for (int i=1; i<=cols ; i++) {
properties.put(md.getColumnName(i),dataInserted.getString(i));
//TODO Change this?
}
Person insertedPerson = new Person();
BeanUtils.populate(insertedPerson,properties);
Is there any other smarter way of doing this? Is it possible to have the
sqlMap procedure like:
<procedure id="insertPersonPck" parameterClass="<my actual class>"
resultMap="<my weak ref cursor containing map">
<![CDATA[{?= call CLAF_PERSON_PCK.INSERT_PERSON(?,?,?)}]]>
</procedure>
and
What about 'strongly' typed cursors?
Thx.
Jan.
Jan Vissers wrote:
> Hi,
>
> I'm evaluating IBatis sqlMap/DAO wrt Oracle functionality, like:
>
> * "RETURNING ... INTO ..." Clause
> * CLOB (oracle.sql.CLOB) >32K
> * BLOB (oracle.sql.BLOB)
> * XMLType (oracle.xdb.XMLType)
> * CallableStatement...
>
> It looks to me that none of these are really supported. I, for
> instance have a packaged function:
>
> function insert_record( p_i_values in pck2.refcursortype)
> return pck2.refcursortype;
>
>
> Is there any way to call these types of objects from IBatis?
>
> Thx.
> Jan.
> --
> Get Firefox! <http://www.spreadfirefox.com/?q=affiliates&id=0&t=70>
> And Get Thunderbird <http://www.mozilla.org/products/thunderbird/>
>
--
Get Firefox! <http://www.spreadfirefox.com/?q=affiliates&id=0&t=55>
And Get Thunderbird <http://www.mozilla.org/products/thunderbird/>