안녕하세요. 고수님들께 질문 드립니다.
다중커서라고 해야될지 용어를 잘모르겠습니다만 보통 프로시저에서 쿼리한 목록을 out cursor 로 받아서 처리중인데
단일 검색결과가 아닌 여러번의 결과를 커서로 받아서 처리해야될 경우가 생겼습니다.
create or replace PROCEDURE SP1
( c1 OUT SYS_REFCURSOR,
c2 OUT SYS_REFCURSOR)
AS
BEGIN
FOR t_list IN
( SELECT ID from T1 )
LOOP
OPEN C1 FOR
SELECT Col1, Col2 FROM T2 WHERE ID = t_list.ID;
OPEN C2 FOR
SELECT Col3, Col4, Col5 FROM T3 WHERE ID = t_list.ID;
END LOOP;
END SP1;
대충 이런식으로 쿼리를 만들었는데 생각하는것처럼 데이터가 나오지 않네요.
테이블 T1 의 ID 를 받아서 루프를 돌면서 T2, T3 의 내용을 테이블row형태로 가져오고 싶은데 출력을 어떻게 해야될지 모르겠습니다.
각테이블의 내용은 T1의 ID에 따라서 여러건씩 select 됩니다. 방식에 문제가 있다면 다르게 처리해도 상관없습니다.
오라클은 11g 사용중입니다.
제가 설명을 부실하게 해서 그런지 원하는 결과는 아니지만 답변에 감사드립니다.
참고로 기존 MSSQL 의 프로시저 내용을 오라클로 옮기는거였는데 오라클 지식이 얕아서 방법을 찾지 못하겠습니다.
내용은 아래와 같은데 변환 가능하시면 부탁좀 드리겠습니다. 입력파라미터는 없습니다.
DECLARE @I int DECLARE @CNT int SET @I = 1 DECLARE @TBL TABLE ( IDX int identity(1,1), ID int ) INSERT INTO @TBL (ID) SELECT ID from T1 SELECT @CNT = @@rowcount WHILE @I <= @CNT BEGIN DECLARE @ID INT SELECT @ID = ID FROM @TBL WHERE IDX = @I -- OUTPUT SELECT COL1, COL2 FROM T2 WHERE ID = @ID SELECT COL3, COL4, COL5 FROM T3 WHERE ID = @ID SET @I = @I + 1 END