OPEN-FOR Statement 사용시 ROW 개수 알수 있나요? 0 4 1,990

by 커피요쿠르트d CURSOR 커서 OPEN FOR [2013.08.08 11:13:03]


수고하십니다. 

커서 좀 사용하다 막히는 부분이 있어 질문드립니다. 
아래는 작업중의 프로시저의 간단한 내용입니다. 
일단 한번 보시고..

 
 PROCEDURE TEST(
 iv_test IN  VARCHAR2,
 cur1   OUT CUR_TEST1  -- 결과를 커서로 
 ) AS 
 lv_query VARCHAR2(4000) ;
 BEGIN

 lv_query := ' select * from dual where 2=1 '; --실행할 쿼리..
 
 OPEN cur1 FOR lv_query ; -- 결과 커서로 만들기 

 -- 이곳에서 cur1의 개수, 즉 위 lv_query의 실행결과의 row 개수를 알아내서 
 -- 조회된 데이터가 없을 경우에 처리를 하고싶습니다. 

 -- if ( cur1%NOTFOUND) THEN ... 뭐 이런식으로요..
 -- 커서가 OPEN한게 열린게 아닌가봐요. ㅠㅠ 
 
 END; --TEST
 

위 프로시저 내용중의 주석부분대로 
OPEN FOR문을 통해 얻은 커서의 개수를 알고 싶습니다. 
혹시 좋은 방법이 있다면 알고 싶습니다. 
도움 바랍니다. 
궁극적으로는 위 결과를 다른 출력 어플리케이션으로 보낼것인데요. 
결과 데이터가 없으면 출력물 형태가 안잡혀서.
더미 데이터 ROW 1개를 보낼려고하는 작업입니다. 

좋은 방법이 있을까요..
좋은 방법아니더라도.. ROW개수를 알 수 있엇으면 좋겠습니다. 
ㅠㅠ
그럼 도움 바랍니다. 

좋은 하루 되셔요..



by 커피요쿠르트d [2013.08.08 11:26:46]
아... 위 쿼리를 결과를 COUNT() 하고 그 결과를 확인 후 처리해도 되는데요.. 

커서의 개수를 알고 싶어서요. 왜 커서의 개수를 알 수 없을까요?
아니.. LOOP 돌릴건 아니니까 ROWCOUNT가 아닌..
NOTFOUND의 결과만 알고 싶은데..
왜 알 수 없을까요? ㅠㅠ 이 이유가 궁금하네요..

댓글 쓰다가 생각난건데..
SQL%FOUND 라는 휼륭한 속성을 사용할 수 있어서 일까요? ㅜㅜ

아.. 내 오전시간..ㅠㅠ    
점심 맛나게 드세요.. 


by 커피요쿠르트d [2013.08.08 11:29:48]
FOR문이라 자동으로 커서가 닫혀서 그런걸까요? 
ㅠㅠ


by 마농 [2013.08.08 12:14:35]
일단 요구하신 카운트 기능은 PL/SQL 쪽에서 구현하기는 어려울 듯 하구요.
더미 데이터를 만드는거는 어제 올라온 질문중 유사한 질문이 있었구요.
http://oracleclub.com/article/60066
이런거는 어플리케이션쪽에서 처리하는게 좋지 않을까요?

by 커피요쿠르트d [2013.08.08 13:17:10]
호.. 
신기하네요. 
말씀하신대로 저도 같은 경우입니다. ㅋ
조회를 더미row관련해서 할 걸 그랬네요;;



실은 어제 union all을 사용하여 쿼리를 작성하였는데.

어플리케이션에서 .. 원하는대로 작동은 하는데.. 쿼리오류메시지가 튀어나와서요;;(ㅠㅠ 작동은하는데..ㅠㅠ)

쿼리 말고 프로시저를 이용할려다 보니 여기까지 오게되었네요 ㅋ

아. 그리고 말씀하신대로 어플리케이션의 기본기능에 
조회된 자료가 없을 때 자동으로 처리가 되는데요.. 
이게 좀 상황이 달라서 
제가 원하는대로 처리가 되지 않아서 더미 row를 뿌릴려고 시도하고 있었습니다. 
어쩌면 어플리케이션 쪽에 문의를 해봐야할 수도 있겠네요. 

감사합니다.  
안된다는거 알았으니 진도 나갈 수 있겠어요. 

매번 감사드립니다. 
무탈히 무더운 여름 나시길 바랍니다. 
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입