2016-06-03 4 views
-1

제 2 번째 DBMS_OUTPUT.OUT_LINE이 내 목록을 인쇄하지 않는 이유는 무엇입니까? 나는 익명의 블록을 받았고 표제 (RANK : BABY NAMES :)는 내 요청한 목록을 출력하지 않습니다. 내 출력으로이받을 결과PL SQL : 코드 블록에서 목록 인쇄. 제목이 있지만 익명으로 된 '익명 블록 완료'가 표시됩니다.

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를 완료 여기 내 코드입니다

+0

아마도 커서에 의해 반환 된 행이없는 것입니까? – Boneist

답변

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;