Quel est l'équivalent de l'Oracle REF CURSEUR dans MySQL lors de l'utilisation de JDBC?
Dans Oracle je peux déclarer une référence curseur...
TYPE t_spool IS REF CURSOR RETURN spool%ROWTYPE;
...et l'utiliser pour passer un curseur en tant que valeur de retour...
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;
...et puis le capturer comme un résultat en utilisant 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);
Quel est l'équivalent en MySQL?
Vous devez vous connecter pour publier un commentaire.
Mysql a un curseur implicite que vous pouvez comme par magie retour à partir d'une procédure stockée si vous émettre un select.
Voici un exemple:
et dans votre code java:
Googler sur les curseurs dans MySQL, il ne semble pas comme vous pouvez effectivement revenir un Curseur à partir d'un Proc ou de la Fonction. En outre, j'ai trouvé ce qui suit dans le JDBC MySQL manuel:
"MySQL ne prend pas en charge SQL curseurs, et le pilote JDBC de ne pas les imiter, de sorte que "setCursorName()" n'a aucun effet."
En général, je crois Oracle mise en oeuvre ici pauses JDBC, et n'est pas utilisée ailleurs (MySQL, MSSQL, etc). Vous devez retourner vos résultats sous la forme d'une instruction select et itérer sur le JDBC ResultSet, comme c'est la norme (et prévu) pratique lors de l'utilisation de JDBC.
remplir une table temporaire dans une procédure et il suffit de lire la table temporaire... 🙂