3

Oracleでは、参照カーソルを宣言できます...

TYPE t_spool IS REF CURSOR RETURN spool%ROWTYPE;

...そしてそれを使用して、戻り値としてカーソルを渡します...

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;

...そして、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);

MySQLで同等のものは何ですか?

4

3 に答える 3

3

MySQLのカーソルをグーグルで検索すると、ProcまたはFunctionから実際にカーソルを返すことができないようです。さらに、MySQL JDBC マニュアルで次のことを見つけました。

「MySQL は SQL カーソルをサポートしておらず、JDBC ドライバーはそれらをエミュレートしないため、"setCursorName()" は効果がありません。」

一般に、ここでの Oracle の実装は JDBC を壊し、他の場所 (MySQL、MSSQL など) では使用されていないと思います。JDBC を使用する場合の標準的な (および意図された) 慣行として、結果を select ステートメントとして返し、JDBC ResultSet を反復処理する必要があります。

于 2008-11-08T05:19:36.943 に答える
-1

プロシージャで一時テーブルに入力し、一時テーブルを読み取るだけです... :)

于 2010-06-01T19:00:03.443 に答える