number long data java mysql oracle jdbc ref-cursor

java - long - ¿Cuál es el equivalente de REF CURSOR de Oracle en MySQL al usar JDBC?



java long oracle (3)

Buscando en Google los cursores en MySQL, no parece que puedas devolver un Cursor desde un Proc o una Función. Además, encontré lo siguiente en el manual de MySQL JDBC :

"MySQL no admite cursores de SQL, y el controlador JDBC no los emula, por lo que" setCursorName () "no tiene ningún efecto."

En general, creo que la implementación de Oracle aquí rompe JDBC, y no se usa en ninguna otra parte (MySQL, MSSQL, etc.). Debería devolver los resultados como una instrucción de selección e iterar sobre el ResultSet de JDBC, como es la práctica estándar (y prevista) cuando se utiliza JDBC.

En Oracle puedo declarar un cursor de referencia ...

TYPE t_spool IS REF CURSOR RETURN spool%ROWTYPE;

... y usarlo para pasar un cursor como el valor de retorno ...

FUNCTION end_spool RETURN t_spool AS v_spool t_spool; BEGIN COMMIT; OPEN v_spool FOR SELECT * FROM spool WHERE key = g_spool_key ORDER BY seq; RETURN v_spool; END end_spool;

... y luego capturarlo como resultado establecer usando JDBC ...

private Connection conn; private CallableStatement stmt; private OracleResultSet rset; [...clip...] stmt = conn.prepareCall("{ ? = call " + call + "}"); stmt.registerOutParameter(1, OracleTypes.CURSOR); stmt.execute(); rset = (OracleResultSet)stmt.getObject(1);

¿Cuál es el equivalente en MySQL?


Mysql tiene un cursor implícito que puede devolver mágicamente desde un procedimiento almacenado si emite una selección.

Aquí hay un ejemplo:

CREATE PROCEDURE `TEST`() MODIFIES SQL DATA BEGIN SELECT * FROM test_table; END;

y en tu código java:

String query = "{CALL TEST()}"; CallableStatement cs = con.prepareCall(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs = cs.executeQuery();


llene una tabla temporal en un procedimiento y solo lea la tabla temporal ... :)