terça-feira, 25 de setembro de 2007

Oracle : Dica : ResultSet : Procedure

recebi uma dica bem interessante de um amigo(Robson Hermes) hoje quanto a ResultSet retornados de procedures do Oracle:

obs.: eles não são scrollable (são forward only, em outras palavras, pegue apenas o próximo, não tem como recuperar um anterior)

exemplo:

se você executar uma procedure que retorna um cursor (ResultSet no java)

ResultSet rset;
String jobquery = "begin ? := get_jobs; end;";
CallableStatement callStmt = conn.prepareCall(jobquery);
callStmt.registerOutParameter(1, OracleTypes.CURSOR);
callStmt.execute();
rset = (ResultSet)callStmt.getObject(1);

Este ResultSet só poderá ser navegado para frente... qualquer método de posicionamento (como o absolute) irá acarretar em uma exceção, mesmo que no prepareCall você passe o parâmetro ResultSet.TYPE_SCROLL_INSENSITIVE

Nessa página da oracle diz bem claro:
http://download.oracle.com/docs/cd/B25329_01/doc/appdev.102/b25320/addfunc.htm

Nota: instâncias do REF CURSOR não são pagináveis.