database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
ㆍSybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Sybase Q&A 746 게시물 읽기
No. 746
sp에서 다중으로 커서를 선언하고 싶은데....
작성자
궁금이
작성일
2003-10-13 17:31
조회수
5,306

즉 대강의 형태는 다중  FOR NEXT문과 같습니다.

 

DECLARE XXX CURSOR FOR           --> 먼저 XXX를 선언하고
      SELECT * FROM table1

OPEN XXX
FETCH cur_bugum INTO  @XXX

while @@sqlstatus <> 2
      begin
            DECLARE YYY CURSOR FOR      --> YYY를 선언하고
                  SELECT * FROM table2

           OPEN YYY

           FETCH YYY INTO @YYY

           while @@sqlstatus <> 2
                 begin
                      SELECT ~~~~               --> XXX와 YYY에서 패치해온 한 행을 가지고 비교 작업한다.

                      FETCH YYY INTO @YYY

                 end
           CLOSE YYY                               --> XXX의 첫행과 YYY의 모든행과 비교가 끝났다.
       FETCH XXX INTO  @XXX                --> XXX의 두번째 행을 패치해온다.
       end                                             --> XXX의 두번째 행을 가지고 다시 YYY를 선언할 준비를 한다.
   CLOSE XXX    
END
COMMIT TRANsaction;

 

그런데 안쪽 커서의 2번쨰부터는 생성을 안하고 그냥 빠져나옵니다. 다른 DB에서는 다 지원이

되었던 걸로 기억나는데 사이베이스에서는 안되는 것일까요. 못하는 것알까여???

 

 

이 글에 대한 댓글이 총 1건 있습니다.

close YYY 바로 다음에 deallocate cursor YYY 로 내부에 선언된 커서를 메모리에서 해제하셔야 합니다.

 

다음은 ASE 12.5.0.2에서 개발한 예제입니다.

 

create procedure sp_makeTABLE03 
as 
begin 
    set nocount on 
    delete from TABLE03 
 
    declare @sAcctCode      char(9), 
            @sChildAcctCode char(9), 
            @sCalcMethod    varchar(500), 
            @nSign          int 
 
    declare cursor_1 cursor for 
        select distinct sAcctCode 
        from TABLE04 
 
    open cursor_1 
 
    fetch cursor_1 into @sAcctCode 
 
    while ( @@sqlstatus = 0 ) 
    begin 
        select @sCalcMethod = "" 
 
        declare cursor_2 cursor for 
            select sChildAcctCode, nSign 
            from TABLE04 
            where sAcctCode = @sAcctCode 
            order by sChildAcctCode 
 
        open cursor_2 
 
        fetch cursor_2 into @sChildAcctCode, @nSign 
 
        while ( @@sqlstatus = 0 ) 
        begin 
            select @sCalcMethod = 
                ltrim(rtrim(@sCalcMethod)) + (case when @nSign = 1 then '+' else '-' end) + @sChildAcctCode 
 
            fetch cursor_2 into @sChildAcctCode, @nSign 
        end 
 
        insert into TABLE03 values (@sAcctCode, 0, @sCalcMethod) 
 
        close cursor_2 
        deallocate cursor cursor_2 
 
        fetch cursor_1 into @sAcctCode 
    end 
 
    close cursor_1 
    deallocate cursor cursor_1 
end

go

 

사이베이스님이 2003-10-16 16:40에 작성한 댓글입니다.
이 댓글은 2003-10-16 16:41에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
749여러분의 도움을 받고자 합니다..SP에 관하여.
임효석
2003-10-17
2959
748[도와주세요..]테이블 구조를 확인하는법.... [2]
나라
2003-10-16
4610
747sp내에서 if_else 대신에 select case 쓸수는 없나요?
이동복
2003-10-14
4542
746sp에서 다중으로 커서를 선언하고 싶은데.... [1]
궁금이
2003-10-13
5306
745sp에서 temp table을 사용하고 싶은데.... [1]
김승환
2003-10-10
3392
744outer join에 대한 질문이 있습니다. [1]
정재순
2003-10-09
3624
743CP 실행시 에러 [1]
궁금이
2003-10-09
3684
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다