-1

2 番目の DBMS_OUTPUT.OUT_LINE でリストが出力されない理由がわかりません。匿名ブロックが完了し、見出し (RANK: BABY NAMES: ) が印刷されますが、要求したリストは印刷されません。これが私のコードです:

SET SERVEROUTPUT ON
SET VERIFY OFF;

DECLARE

V_SEARCH VARCHAR2(20):= '&SV_SEARCH';
V_ROWS NUMBER(11) := '&SV_ROWS';

CURSOR C_NAME IS
    SELECT RANK() OVER (ORDER BY CODE DESC)
    FROM (SELECT * FROM "NAME_LIST" WHERE "NAMES" LIKE (V_SEARCH) 
    ORDER BY CODE DESC)WHERE ROWNUM = V_ROWS;

R_NAME C_NAME%ROWTYPE;

BEGIN
    OPEN C_NAME;
    DBMS_OUTPUT.PUT_LINE('RANK:   BABY NAMES:');
    LOOP
    FETCH C_NAME INTO R_NAME;
        EXIT WHEN C_NAME%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(' '||V_ROWS||' '||V_SEARCH);
    END LOOP;
    CLOSE C_NAME;
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Error'); 
END;

結果として、出力としてこれを受け取ります: 匿名ブロックが完了しました RANK: BABY NAMES:

4

2 に答える 2

1

カーソル クエリを単独で実行して、データが取得されていることを確認します。私の推測では、最後に ROWNUM が原因でデータが取り出されていません。代わりに、次のカーソル クエリを試してください。

CURSOR C_NAME IS
SELECT RANK() OVER (ORDER BY CODE DESC)
FROM (SELECT ROWNUM AS RN, NL.* FROM "NAME_LIST" NL WHERE "NAMES" LIKE (V_SEARCH) 
ORDER BY CODE DESC)WHERE RN = V_ROWS;
于 2016-06-06T22:48:38.793 に答える
-2

ROWNUM=1 または何かに劣っています。

于 2018-04-02T16:49:33.863 に答える