Java - Stored Procedures de Oracle y capturar salidas

 
Vista:

Stored Procedures de Oracle y capturar salidas

Publicado por Antonio (33 intervenciones) el 07/10/2003 10:18:44
Hola:

Tengo 2 preguntas sobre oracle. La primera es sobre los procedimientos almacenados en Oracle: ¿cómo creo en oracle (no desde java) un procedimiento almacenado que me devuelva el resultado de una consulta (un resultSet)? Además me interesa poder tratar resultsets para usar los metadatas para los nombres de los campos.

La segunda pregunta es acerca de la captura de salidas de comandos de oracle, lo que se ve en el monitor de PL/SQL de oracle con DBMS_OUTPUT.PUT_LINE("texto a recuperar") ¿se puede recuperar de alguna forma?

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Stored Procedures de Oracle y capturar salidas

Publicado por Antonio (33 intervenciones) el 08/10/2003 17:44:21
Como casi siempre, me contesto yo:

Los procedimientos almacenados de Oracle no devuelven ResultSet asi como así. Mientras que en SQLServer2000 puedes hacer un procedimiento con SELECT * FROM loquesea WHERE dondequieras; en Oracle lo suyo es meter cursores, y declarar en el procedimiento, como variable de salida el cursor que recorra los datos de la tabla.

Y así os dejo el código de java para este procedimiento de consulta oracle (hay que importar oracle.jdbc.*):

CallableStatement cs = con.prepareCall("{call sp_nombre(?,?)}");
cs.registerOutParameter(2,OracleTypes.CURSOR);
cs.setInt(1,clave_usuario);
cs.executeUpdate();
registros = ((OracleCallableStatement)cs).getCursor(2);

Mas o menos funciona.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ojo con DataSource ¡¡no va!!

Publicado por Antonio (33 intervenciones) el 09/10/2003 16:03:27
Ojo con los procedimientos almacenados en Oracle, que devuelven registros. Se usan como antes comenté, pero hay un problema cuando la conexión a la base de datos es a través del DataSource que recupero por JNDI de la configuración del servidor. Y es que el tipo de objeto CallableStatement, no es un OracleCallableStatement, si no algo así como OracleCallableStatementProxy o algo así.

Yo esto último no lo he podido arreglar, son 2 clases o interfaces diferentes y no se puede hacer cast. Da precisamente error en tiempo de ejecución de CastClassException, y pasa con los DataSource. Si usas la conexión tradicional no falla, ya que OracleDataSource deriva de CallableStatement y el objeto que se devuelve por el procedimiento es precisamente de ese tipo OracleDataSource.

La cuestión es manejarse bien las clases de Oracle, y son un coñazo. Suerte para el que lo intente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar