2016-06-03 8 views
-1

Ich bin mir nicht sicher, warum mein 2. DBMS_OUTPUT.OUT_LINE meine Liste nicht ausdruckt? Ich bekomme anonymen Block fertig und die Überschriften (RANK: BABY NAMES:) drucken aber meine angeforderte Liste nicht. Hier ist mein Code:PL SQL: Liste aus Codeblock drucken. Ich erhalte 'anonymous block completed' mit Überschrift, aber keine Ergebnisse

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; 

Als Folge ich das als meine Ausgabe erhalten: anonymer Block abgeschlossen RANK: Babynamen:

+0

Vielleicht gibt es keine Zeilen von Ihrem Cursor zurückgegeben? – Boneist

Antwort

1

Ich würde Ihre Cursor-Abfrage ausführen, indem sich um sicherzustellen, dass Sie bekommen Daten. Meine Vermutung ist, dass Ihr ROWNUM am Ende dazu führt, dass Sie keine Daten ziehen. Versuchen Sie stattdessen diese Cursorabfrage:

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;