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
운영게시판
최근게시물
DB2 Q&A 1793 게시물 읽기
No. 1793
서브쿼리시 에러..
작성자
전홍준(s96jhj)
작성일
2009-01-07 16:25
조회수
10,688

SELECT 

      VHLDDT AS STTT ,

 

    (  SELECT  CASE WHEN C.RATGBN ='YEN' THEN C.RATRAT/100 ELSE C.RATRAT END 

        FROM    COMLIB.RATEF AS C

        WHERE   C.RATSAL ='M'

   

        AND     C.RATGBN = A.VHCURR

       

        AND     C.RATYYY = SUBSTR(A.VHLDDT,1,4)

        AND     C.RATMMM = SUBSTR(A.VHLDDT, 5,2)

        AND     C.RATDAY = SUBSTR(A.VHLDDT, 7,2)

   )  AS RATRAT

   

    FROM    PURDLIB.PVH AS A

 

    WHERE  A.VHLDDT  BETWEEN '20081101' AND '20081131' 


위와 같은 쿼리를 날리면 잘 실행이 됩니다.

그런데 위의 쿼리를 밖으로 한번 더 묶으면..


-->>


SELECT AA.STTT , AA.RATRAT

FROM

(

    SELECT 

      VHLDDT AS STTT ,

 

    (  SELECT  CASE WHEN C.RATGBN ='YEN' THEN C.RATRAT/100 ELSE C.RATRAT END 

        FROM    COMLIB.RATEF AS C

        WHERE   C.RATSAL ='M'

   

        AND     C.RATGBN = A.VHCURR

       

        AND     C.RATYYY = SUBSTR(A.VHLDDT,1,4)

        AND     C.RATMMM = SUBSTR(A.VHLDDT, 5,2)

        AND     C.RATDAY = SUBSTR(A.VHLDDT, 7,2)

   )  AS RATRAT

   

    FROM    PURDLIB.PVH AS A

 

    WHERE  A.VHLDDT  BETWEEN '20081101' AND '20081131'

) AS AA

이런식으로 한번더 묶어서 돌리면 에러가 납니다.

Error: SQL0901 - SQL system error. (State:S1000, Native Code: FFFFFC7B)


문제가 무엇인지..버전문제인지..고수님들의 도움을..

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

원인은 잘 모르겠네요.
한가지 권고해드릴게 있습니다. select 절에 삽입된 sql문은 각 건수만큼 반복실행이 됩니다. 
반복실행을 피하기 위해 outor join을 사용하고 group by를 사용하는것이 더 좋을것 같습니다.


SELECT VHLDDT AS STTT, 
             max(CASE WHEN C.RATGBN ='YEN' THEN C.RATRAT/100 ELSE C.RATRAT END) RATRAT
  FROM PURDLIB.PVH AS A
       LEFT JOIN COMLIB.RATEF AS C
         ON     C.RATSAL ='M'
        AND     C.RATGBN = A.VHCURR
        AND     C.RATYYY = SUBSTR(A.VHLDDT,1,4)
        AND     C.RATMMM = SUBSTR(A.VHLDDT, 5,2)
        AND     C.RATDAY = SUBSTR(A.VHLDDT, 7,2)
 WHERE A.VHLDDT  BETWEEN '20081101' AND '20081131'  
 GROUP BY VHLDDT;

조는냥이님이 2009-01-08 11:00에 작성한 댓글입니다. Edit

냥이님 글 잘 보았습니다.

냥이님이 말씀하셨듯이 원래는 outer join 으로 쿼리를 사용합니다.

그런데 일부 레포트에서 저렇게 서브쿼리로 짠게 몇개가 있나봐요.

저런것들을 모두 찾아내서 바꿔주면 좋지만 분량이 많은지라..


근데 문제는 저 서브쿼리도 잘 돌아갔다는거에요..

디비에 무슨 작업을 한 순간 이후부터 안돌아가는데..

과연 어떤걸 잡아줘야는지..그게 궁금합니다..

전홍준님이 2009-01-08 11:10에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1796[롤백관련] sql 실행시 rollback시키는 방법 [3]
왕초보
2009-01-09
8923
1795DB2 에서 오라클 연결.. [2]
왕모름
2009-01-09
9707
1794UNION ALL 사용시 FETCH FIRST 1 ROWS ONLY 사용 가능 여부 [2]
김성훈
2009-01-08
10274
1793서브쿼리시 에러.. [2]
전홍준
2009-01-07
10688
1792DB2 Connect by 구문~ [2]
김성훈
2009-01-07
20293
1791sqlcode 질문입니다
김한중
2009-01-06
9301
1790DB2 테이블 , 인덱스여부 어떻게 확인하나요 [1]
택이
2008-12-29
13550
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2019 DSN, All rights reserved.
작업시간: 0.065초, 이곳 서비스는
	PostgreSQL v11.5로 자료를 관리합니다