쿼리 실행시 오류발생 0 2 2,814

by Mr.oracle [2009.10.21 08:32:18]


아래쿼리를 실행시키면 아래 오류가 발생합니다   UNION ALL 을 기준으로 따로따로 쿼리를 날리면

실행이 잘되는데 전체를 돌리면 아래 에러가 발생하내요 고수님들 좀 봐주세요~ ㅠ.ㅠ

ora-24347 : 함수 관계에 있는 null 열에 경고가 있습니다

 SELECT TFN_NO,
   TFN_SEQ,
   TFN_GUBUN,
   TFN_PART,
   TFN_TITLE,
   TFN_SABUN,
   TFN_DATE,
   TFN_READ_COUNT,
   TFN_VISIBLE,
   TFN_LEVEL,
   TFN_COUNT,
   TFN_FILE   
 FROM (SELECT "TBF_NOTICE"."TFN_NO" TFN_NO,
      "TBF_NOTICE"."TFN_SEQ" TFN_SEQ,
      "TBF_NOTICE"."TFN_GUBUN" TFN_GUBUN,
      "TBF_NOTICE"."TFN_PART" TFN_PART,
      "TBF_NOTICE"."TFN_TITLE" TFN_TITLE,
      "TBF_NOTICE"."TFN_SABUN" TFN_SABUN,
      "TBF_NOTICE"."TFN_DATE" TFN_DATE,
      "TBF_NOTICE"."TFN_READ_COUNT" TFN_READ_COUNT,
      DECODE("TBF_NOTICE"."TFN_VISIBLE", 'Y', 'Y', 'N') TFN_VISIBLE,
      1 TFN_LEVEL,
      '[0]' TFN_COUNT,
      0 TFN_FILE
    FROM "TBF_NOTICE"
     WHERE "TBF_NOTICE"."TFN_PART" = 'NO' AND
      "TBF_NOTICE"."TFN_DATE"  >= SYSDATE - 7

   UNION ALL

     SELECT A."TFN_NO" TFN_NO,
      A."TFN_SEQ" TFN_SEQ,
      A."TFN_GUBUN" TFN_GUBUN,
      A."TFN_PART" TFN_PART,
      A."TFN_TITLE" TFN_TITLE,
      A."TFN_SABUN" TFN_SABUN,
      A."TFN_DATE" TFN_DATE,
      A."TFN_READ_COUNT" TFN_READ_COUNT,
      DECODE(A."TFN_VISIBLE", 'Y', 'N', 'N') TFN_VISIBLE,
      A.TFN_LEVEL TFN_LEVEL,
      '[' || TO_CHAR(SUM(NVL(B.TFN_COUNT, 0))) || ']' TFN_COUNT,
      NVL(SUM(C.TFN_FILE), 0) TFN_FILE
    FROM  (SELECT E."TFN_NO" ,
         E."TFN_SEQ",  
         E."TFN_GUBUN",
         E."TFN_PART",
               E."TFN_TITLE",
                E."TFN_SABUN",  
                E."TFN_DATE",  
               E."TFN_READ_COUNT",
               E."TFN_VISIBLE",
            LEVEL TFN_LEVEL 
       FROM "TBF_NOTICE" E
      START WITH E."TFN_SEQ" = 1
    CONNECT BY PRIOR E."TFN_SEQ" = E."TFN_UPPER_SEQ" 
         AND PRIOR  E."TFN_NO" = E."TFN_NO") A,
      (SELECT D."TFNR_NO" ,
         D."TFNR_SEQ",
         COUNT(D."TFNR_NO") TFN_COUNT
       FROM "TBF_NOTICE_REPLY" D
        GROUP BY D."TFNR_NO", D."TFNR_SEQ") B,
      (SELECT F."TFNF_NO" ,
         F."TFNF_SEQ",
         COUNT(F."TFNF_NO") TFN_FILE
       FROM "TBF_NOTICE_FILE" F
        GROUP BY F."TFNF_NO", F."TFNF_SEQ") C
   WHERE A."TFN_NO" = B."TFNR_NO" (+) AND
       A."TFN_SEQ" = B."TFNR_SEQ" (+) AND
       A."TFN_NO" = C."TFNF_NO" (+) AND
       A."TFN_SEQ" = C."TFNF_SEQ" (+)
  GROUP BY A."TFN_NO",
       A."TFN_SEQ",
       A."TFN_GUBUN",
       A."TFN_PART",
       A."TFN_TITLE",
       A."TFN_SABUN",
       A."TFN_DATE" ,
       A."TFN_READ_COUNT",
       A."TFN_VISIBLE",
       A.TFN_LEVEL
     ORDER BY A."TFN_NO" DESC)

by 마농 [2009.10.21 09:34:11]
우선. 위 에러메세지와는 별개이지만 order by 구문이 잘못되었습니다.
union 대상 집합 각각의 쿼리에는 order by를 사용할 수 없습니다.
정렬한 쿼리를 인라인뷰로 감싸서 union 하시던가.
아니면 맨 마지막에 union 전체집합에 대한 정렬을 하시던가 해야 합니다.

그리고, 위 에러는 제가 경험했던 버그인듯 합니다.
파워빌더7.0에 오라클10g 사용할때 나던 에러네요.
이건 에러가 나지 않도록 적절히 바꿔주는 수밖에 없을듯 합니다.
보통 그룹함수에 널이 포함될때 에러가 나더군요.
NVL(SUM(C.TFN_FILE), 0) ===> SUM(NVL(C.TFN_FILE, 0))

by Mr.oracle [2009.10.21 10:35:56]
정보 감사합니다
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입