2012-12-12 2 views
0

커서를 선언 한 패키지가 있습니다. 그리고 커서를 PROCEDURE의 OUT 변수로 리턴하고 싶습니다. 커서 위치에서 데이터를 가져올 수 없다. 데이터를 먼저 load_data proc에서로드해야합니다. DB 수준의 파일에 동일한 선택 쓰기를 사용하는 추가 기능이 있기 때문에 MMM_CURSOR를 사용하지 않아도됩니다.PL/SQL 커서를 커서에 가져옵니다.

create or replace PACKAGE BODY PCG_MMM AS 

CURSOR MMM_CURSOR(OFFSET NUMBER) IS 
SELECT TYPE, VALUE FROM MMM_TEMP_LOGS WHERE VALUE = OFFSET; 

TYPE RET_TYPE IS REF CURSOR; 

PROCEDURE LOAD_DATA AS 
-- loading data into MMM_TEMP_LOGS-- 
END LOAD_DATA; 

PROCDURE WRITE_TO_FILE AS 
BEGIN 
-- writing to file here -- 
END WRITE_TO_FILE; 

PROCEDURE GET_DATA(DATA RET_TYPE, OFFSET NUMBER:=0) AS 
BEGIN 
    LOAD_DATA; 

    DATA := MMM_CURSOR(OFFSET) ; <--- ?? 

END GET_DATA; 

END PCG_MMM; 

답변

2

커서는 프로 시저에서 전달할 수 없지만 참조 커서는 전달할 수 있습니다. 커서를 참조 커서로 변환 할 수도 없습니다.

커서를 몇 군데에서 사용하려면 + 전달할 수있는 능력이 있어야합니다. 그러면보기로 변경하고 커서 대신 사용하는 것이 좋습니다.

예를 들어

create view MMM_VIEW 
as 
SELECT TYPE, VALUE FROM MMM_TEMP_LOGS; 

(당신이 내 변수를 전달하고 "매개 변수화 전망", 그것의 성능을 위해 그 방법을 계속 찾아 볼 필요가 있다면)

create or replace PACKAGE BODY PCG_MMM AS 

TYPE RET_TYPE IS REF CURSOR; 

PROCEDURE LOAD_DATA AS 
-- loading data into MMM_TEMP_LOGS-- 
    for r_cur in (select * from mmm_view) loop...or whatever (replace the cursor with the view) 
END LOAD_DATA; 

PROCDURE WRITE_TO_FILE AS 
BEGIN 
-- writing to file here -- 
END WRITE_TO_FILE; 

PROCEDURE GET_DATA(DATA out RET_TYPE, OFFSET NUMBER:=0) AS 
BEGIN 
    LOAD_DATA; 

    open DATA for select * From mmm_view where value = OFFSET; 

END GET_DATA; 

END PCG_MMM; 
관련 문제