2013-06-26 3 views
-1

기본 쿼리가 올바르게 작동합니다. 그러나 WHERE 쿼리가 문제인 것 같습니다. 다음은 WHERE 쿼리입니다. 그래서 나는 아래와 같은 TO_CHAR를 earased : WHERE 쿼리에서 오류가 발생합니다.

#startDt# <!--[CDATA[<=]]--> TO_CHAR(TO_DATE(DAY, 'YYYY-MM-DD'), 'YYYYMMDD') AND #endDt# <!--[CDATA[-->=]]> TO_CHAR(TO_DATE(DAY, 'YYYY-MM-DD'), 'YYYYMMDD') 

는 그 다음 날 '(전체) 년 -4713과 9999 사이, 0이 아니어야합니다 ORA-01841'을 제공합니다.

#startDt# <= (TO_DATE(DAY, 'YYYY-MM-DD'), 'YYYYMMDD') AND #endDt# >= (TO_DATE(DAY, 'YYYY-MM-DD'), 'YYYYMMDD') 

는 그 다음 날이 제공 오퍼레이터 또는 전부 와야 ORA-017'97 '

DAY의 데이터 유형은 문자열이다.

누구든지이 문제를 해결할 수 있습니까?

아, 여기 내 전체 쿼리입니다.

<select id="ContentStatis.statis" parameterClass="map" resultMap="ContentStatis"> 
SELECT X.* 
    FROM 
     ( 
     SELECT 
        (CASE 
          WHEN DAY.DAY = '단위 합계' THEN DAY.DAY 
          ELSE TO_CHAR (TO_DATE (DAY.DAY, 'YYYY-MM-DD'), 'YYYYMMDD') 
         END 
        ) AS DAY, 
        DAY.WEEK, 
        MNOT.SUM_STD_CNT AS MNOT_CNT, 
        RSC.MOVIE_500K AS MOVIE_500K_CNT, 
        RSC.MOVIE_1M AS MOVIE_1M_CNT, 
        RSC.MOVIE AS MOVIE_CNT, 
        RSC.EXAM AS EXAM_CNT, 
        RSC.WEB AS WEB_CNT, 
        RSC.IMG AS IMG_CNT, 
        RSC.INTERRAC AS INTERRACTIVE_CNT, 
        RSC.DOC AS DOC_CNT, 
        MNOT.SUM_STD_CNT + RSC.MOVIE_500K + RSC.MOVIE_1M + RSC.MOVIE + RSC.EXAM + RSC.WEB + RSC.IMG + RSC.INTERRAC + RSC.DOC TOT_CNT 
      FROM 
        /* 날짜 */ 
        (SELECT 
           TO_CHAR (TO_DATE ('20130501','YYYY-MM-DD')+LEVEL- 1, 'YYYYMMDD') AS DAY 
           ,CEIL(
             (
             to_number(substrb(TO_CHAR (TO_DATE ('20130501','YYYY-MM-DD')+LEVEL- 1, 'YYYYMMDD'), -2, 2)) 
             + 7 
             - to_number(TO_CHAR(TO_DATE(TO_CHAR (TO_DATE ('20130501','YYYY-MM-DD')+LEVEL- 1, 'YYYYMMDD'),'YYYYMMDD'),'D')) 
            )/7 
            )|| ' 주차' WEEK 
         FROM DUAL 
         CONNECT BY TO_DATE('20130501', 'YYYY-MM-DD') + LEVEL - 1 <![CDATA[<=]]> TO_DATE('20130530', 'YYYY-MM-DD') 
         UNION ALL 
         SELECT '단위 합계', '' FROM DUAL 
        ) DAY LEFT OUTER JOIN 
        /* 리소스 */ 
        (
        SELECT 
           NVL(DT_G.COMM_DT, '단위 합계') COMM_DT 
           ,NVL(SUM(DT_G.MOVIE_500K), 0) AS MOVIE_500K 
           ,NVL(SUM(DT_G.MOVIE_1M), 0) AS MOVIE_1M 
           ,NVL(SUM(DT_G.MOVIE), 0) AS MOVIE 
           ,NVL(SUM(DT_G.EXAM), 0) AS EXAM 
           ,NVL(SUM(DT_G.DOC), 0) AS DOC 
           ,NVL(SUM(DT_G.IMG), 0) AS IMG 
           ,NVL(SUM(DT_G.WEB), 0) AS WEB 
           ,NVL(SUM(DT_G.INTERRAC), 0) AS INTERRAC 
         FROM 
           (
           SELECT 
               COMM_DT 
              , CASE SUMT.RSC_TP_DSCD WHEN 'RTP10' THEN SUMT.SUM_500K END MOVIE_500K 
              , CASE SUMT.RSC_TP_DSCD WHEN 'RTP10' THEN SUMT.SUM_1M END AS MOVIE_1M 
              , CASE SUMT.RSC_TP_DSCD WHEN 'RTP10' THEN SUMT.SUM_500K+SUMT.SUM_1M END AS MOVIE 
              , CASE SUMT.RSC_TP_DSCD WHEN 'RTP11' THEN SUMT.SUM_STD_CNT END AS EXAM 
              , CASE SUMT.RSC_TP_DSCD WHEN 'RTP12' THEN SUMT.SUM_STD_CNT END AS DOC 
              , CASE SUMT.RSC_TP_DSCD WHEN 'RTP13' THEN SUMT.SUM_STD_CNT END AS IMG 
              , CASE SUMT.RSC_TP_DSCD WHEN 'RTP14' THEN SUMT.SUM_STD_CNT END AS WEB 
              , CASE SUMT.RSC_TP_DSCD WHEN 'RTP01' THEN SUMT.SUM_STD_CNT END AS INTERRAC 
            FROM (
               SELECT RSC_TP_DSCD, SUM(STDY_CNT) AS SUM_STD_CNT, SUM(MOVIE_STDY_CNT_N1M) AS SUM_1M, SUM(MOVIE_STDY_CNT_N500K) AS SUM_500K, COMM_DT 
               FROM (
                 SELECT RSC_SNO, STDY_CNT, MOVIE_STDY_CNT_N1M, MOVIE_STDY_CNT_N500K, COMM_DT 
                  FROM LRMS.V_EBSM_PKG_RSC_COMM_CNT 
                 WHERE PKG_SNO = 0 AND RSC_SNO != 0 
                 AND COMM_DT BETWEEN TO_CHAR(TO_DATE('20130501', 'YYYY-MM-DD'), 'YYYYMMDD') AND TO_CHAR(TO_DATE('20130530', 'YYYY-MM-DD'), 'YYYYMMDD') 
                 ) CNT 
                LEFT OUTER JOIN LRMS.V_LRRM_RSC RSC ON CNT.RSC_SNO = RSC.RSC_SNO 
               GROUP BY RSC_TP_DSCD, COMM_DT 
              ) SUMT 
           ) DT_G 
         GROUP BY ROLLUP(DT_G.COMM_DT) 
        ) RSC ON DAY.DAY = RSC.COMM_DT 
        /* M노트 */ 
        LEFT OUTER JOIN 
        (
         SELECT NVL(SUM(STDY_CNT), 0) AS SUM_STD_CNT, NVL(COMM_DT, '단위 합계') COMM_DT 
         FROM LRMS.V_EBSM_PKG_RSC_COMM_CNT 
         WHERE PKG_SNO != 0 AND RSC_SNO = 0 
           AND COMM_DT BETWEEN TO_CHAR(TO_DATE('20130501', 'YYYY-MM-DD'), 'YYYYMMDD') AND TO_CHAR(TO_DATE('20130530', 'YYYY-MM-DD'), 'YYYYMMDD') 
         GROUP BY ROLLUP(COMM_DT) 
        ) MNOT ON DAY.DAY = MNOT.COMM_DT 
     ) X 

WHERE 1=1 
and X.TOT_CNT IS NOT NULL 

<isNotEmpty property="startDt" prepend="AND"> 
    <isNotEmpty property="endDt"> 
     (#startDt# <![CDATA[<=]]> TO_CHAR(TO_DATE(DAY, 'YYYY-MM-DD'), 'YYYYMMDD') AND #endDt# <![CDATA[>=]]> TO_CHAR(TO_DATE(DAY, 'YYYY-MM-DD'), 'YYYYMMDD')) 

    </isNotEmpty> 
</isNotEmpty> 
</select> 

그리고 오류가

org.springframework.dao.DataIntegrityViolationException : SqlMapClient를 조작; SQL [];

--- 매개 변수 맵을 적용하는 동안 오류가 발생했습니다.

--- ContentStatis.statis-InlineParameterMap을 확인하십시오.

--- (쿼리에 실패했습니다) 문을 확인하십시오. --- 원인 : java.sql.SQLDataException : 'ORA-01841 : (전체) 연도는 -4713에서 +9999 사이 여야하며 0이 아니어야합니다.'; 중첩 예외는 com.ibatis.common.jdbc.exception.NestedSQLException : 입니다. --- 매개 변수 맵을 적용하는 중 오류가 발생했습니다.

--- ContentStatis.statis-InlineParameterMap을 확인하십시오.

--- (쿼리에 실패했습니다) 문을 확인하십시오.

--- 원인 : java.sql.SQLDataException : ORA-01841가 : 'ORA-01841가 : (전체) 년 -4713과 9999 사이, 그리고 공해야한다'

나는 오라클을 사용

+0

그것이 자발적 행동이었다 --- "그래서 아래와 같이 TO_CHAR를 earased"또는 (일반적인를 따랐 는가해야 의미있는) 아이디어? – zerkms

+0

전체 검색어를 입력하십시오. 가독성을 위해 쿼리의 형식을 올바르게 지정하십시오. 사용중인 SQL 데이터 유형 (MySQL, Oracle, MSSQL 등), 쿼리를 수행하기 위해 사용하는 언어 (PHP, 명령 행, Java, ASP.NET 등)를 알려주십시오 ** 정확한 ** 오류 메시지, StackOverflow에 의해 주어진 태그를 사용하여 올바른 형식으로. – BLaZuRE

+0

방금 ​​전체 쿼리를 게시했습니다.희망 하시겠습니까? – user2470075

답변

2

지정한 형식으로 날짜를 사용하고 있지 않습니다. 예를 들어 :

TO_DATE('20130501', 'YYYY-MM-DD') 

TO_DATE('2013-05-01', 'YYYY-MM-DD') 

또는

TO_DATE('20130501', 'YYYYMMDD') 
관련 문제