0

(Oracle の) カーソル内にある SELECT COUNT(*) ステートメントの行数を取得する必要があります。

次のコードはそれを明確に説明する必要があります。

PROCEDURE Save(CF_CURSOR OUT "VPA"."CF_#Runtime".CF_CURSOR_TYPE) AS
    V_CF_CURSOR "VPA"."CF_#Runtime".CF_CURSOR_TYPE;
    CF_ROWCOUNT NUMBER;
    BEGIN
        OPEN V_CF_CURSOR FOR
        SELECT COUNT(*) INTO CF_ROWCOUNT FROM (
            SELECT * FROM "VPA"."Employee" -- returns 1 row
        ) WHERE ROWNUM <= 1;
        IF(CF_ROWCOUNT = 0) THEN
            -- DO SOMETHING BUT NEVER GOES HERE
        END IF;
        COMMIT;
    CF_CURSOR := V_CF_CURSOR;
    END;

ここで、CF_ROWCOUNT の値は設定されません。カーソルを削除すると、すべてが期待どおりに機能します。SQL%ROWCOUNT を使用しようとしましたが、どちらも機能しません。そして、カーソルを削除できません...

前もって感謝します!

4

1 に答える 1

2

カーソルを開こうとしましたか - COUNT(*) を実行し、ref-cursor ステートメント内で INTO として実行する代わりに、それを CF_ROWCOUNT 変数にフェッチします。

例えば:

OPEN V_CF_CURSOR FOR SELECT COUNT(*) FROM "VPA"."Employee"; -- returns 1 row
FETCH V_CF_CURSOR INTO CF_ROWCOUNT;
于 2013-02-27T09:02:11.633 に答える