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
운영게시판
최근게시물
Oracle Q&A 39687 게시물 읽기
No. 39687
ORA-01843 재질문 ㅠ.ㅠ
작성자
해외
작성일
2012-10-13 06:28
조회수
5,104

마농님 말씀되로 조치를 해보았습니다.
그런데,,
ORA-01843 와 함께 OAR-02063가 함께 나옵니다.
아주 미쳐버리겠습니다.
그래서 컬럼을 전부 varchar2(8)로 수정을 하고 다시 해보았는데..결과는 같았습니다.
여기 나온 관계된 글을 찾아보니 "NLS_DATE_LANGUAGE" 수정 하면 된다고 해서 그것 까지 적용을 했는데도...ㅠ.ㅠ

OAR-02063 이 에러는 *********@******  링크 걸면서 나는 에러라고 하는데 이것 또한 원인을 모르겠습니다.

내가 사용하는 DB TOOL은 ORACLE SQL DEVELOPER 인데...
전혀 ERROR가 나질 않습니다.
비슷한 경우도 프로그램에 많이 있는데...왜 이 쿼리만 이러는지 모르겠습니다.

TEST 환경은 다음과 같습니다.

   - 다음 -

1) LOCAL에서 SQL TEST 했을때 문제 없음.
2) 개발 서버에 올리고 나서 TEST 했을때도 문제 없음
3) 실제 서버에 올리면 문제 발생

그래서 제가 만든 쿼리를 전부 올립니다.
한번만 더 봐주세요..!! 부탁드립니다.
죄송한 마음 급치못하고 있습니다.


SELECT  A.PLANDATE
        ,A.PLANQTY
        ,A.ITEM
        ,D.ITEM_NAME
        ,A.RESOURCENAME
        ,A.STARTTIME
        ,A.ENDTIME 
  FROM (
        SELECT  C.QTY , C.ETA 
                ,A.ITEM
                ,A.RESOURCENAME
                ,A.PLANDATE
                ,A.FPPLANID               
                ,TO_CHAR(TO_DATE(A.STARTTIME,'YYYY/MM/DD HH24:MI:SS'),'YYYY/MM/DD HH24:MI:SS') STARTTIME
               ,TO_CHAR(TO_DATE(A.ENDTIME,'YYYY/MM/DD HH24:MI:SS'),'YYYY/MM/DD HH24:MI:SS') ENDTIME
                ,SUM(A.PLANQTY) PLANQTY 
                ,B.TOTALQTY
                ,TRUNC(MOD((TO_DATE(A.ENDTIME, 'YYYYMMDDHH24MISS') - TO_DATE (A.STARTTIME, 'YYYYMMDDHH24MISS')),1) * 24)  AS HOUR_TOT   
                ,ROUND(MOD((TO_DATE(A.ENDTIME, 'YYYYMMDDHH24MISS') - TO_DATE (A.STARTTIME, 'YYYYMMDDHH24MISS')),1) * 24 * 60)  AS MINUTE_TOT 
          FROM IF_FP_PLAN_REFERENCE  A 
                ,IJT_FP_METALINFOR B
                ,mst_inventory_mfg@FP_INJ_REAL C
         WHERE 1=1
           AND A.RESOURCENAME = B.RESOURCENAME(+)
           AND A.SUBRESOURCENAME = B.SUBRESOURCE
           AND A.ITEM = B.ITEM(+) 
           AND A.ITEM = C.ITEM(+)
           AND C.ETA >= TO_CHAR(TO_DATE(SYSDATE - 60, 'YY/MM/DD','NLS_DATE_LANGUAGE=KOREAN'),'YY/MM/DD')
           AND C.ETA = (SELECT MAX(ETA) FROM *********@******  WHERE ITEM = A.ITEM)            
         GROUP BY C.QTY, C.ETA, A.ITEM, A.RESOURCENAME, A.FPPLANID, A.PLANDATE, A.STARTTIME, A.ENDTIME , B.TOTALQTY
         ORDER BY A.RESOURCENAME,A.PLANDATE,A.STARTTIME
        ) A, 
        (
        SELECT RESOURCE_NAME
                ,TT_ITEM
                ,NVL(TRUNC((60 / REAL_TT ) * 60 * 24),0) AS REAL_COM
                ,NVL(TRUNC((60 / REAL_TT ) * 60),0) AS REAL_MIN
                ,REAL_TT
          FROM IJT_FP_TACKTIME
         WHERE 1=1
       ) B,
       (
         SELECT MODEL_NUMBER, DO_DATE , SUM(PLAN_QTY) AS PLAN_QTY
           FROM  IJT_DO_INFO       
          WHERE DO_DATE BETWEEN TO_CHAR(SYSDATE,'YYYYMMDD') AND TO_CHAR(SYSDATE + 3,'YYYYMMDD')
          GROUP BY MODEL_NUMBER, DO_DATE
       ) C,
       (
         SELECT ITEM, ITEM_NAME, MODEL
           FROM CORP_MASTER_ITEM
          WHERE 1=1 
      ) D
 WHERE 1=1
   AND A.ITEM = B.TT_ITEM(+)
   AND A.ITEM = C.MODEL_NUMBER(+)
   AND A.PLANDATE = TO_CHAR(TO_DATE(C.DO_DATE(+),'YYYYMMDD','NLS_DATE_LANGUAGE=KOREAN'),'YYYYMMDD')
   AND A.RESOURCENAME = B.RESOURCE_NAME
   AND A.ITEM = D.ITEM(+)
   AND A.FPPLANID = '20121011'
   AND A.PLANDATE BETWEEN '20121012'  AND  '20121012'
 ORDER BY  A.PLANDATE,  A.RESOURCENAME, A.ITEM, A.STARTTIME, A.ENDTIME

미안하고 고맙습니다.

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

날짜함수를 그냥 막 쓰시네요.
잘못된 부분이 많습니다.


1. 이 부분은 날짜로 바꾸고 문자로 다시 바꾸는데 앞뒤 포멧이 똑같습니다.
TO_CHAR(TO_DATE(A.STARTTIME, 'YYYY/MM/DD HH24:MI:SS'),'YYYY/MM/DD HH24:MI:SS')
포멧이 같다면 굳이 바꿀 필요가 없지요?
그 아래 이런 구문이 또 있네요.
TO_DATE (A.STARTTIME, 'YYYYMMDDHH24MISS')
아마도 이 구문이 맞는 듯 하네요.
A.STARTTIME 이 구분기호 없이 숫자만 들어가 있다면
위와 같이 'YYYY/MM/DD HH24:MI:SS' 이런 포멧 쓰시면 안되죠.
포멧을 정확하게 맞춰 줘야죠.


2. 이부분에선 날짜를 다시 날짜로 바꾸네요.(에러원인)
TO_CHAR(TO_DATE(SYSDATE - 60, 'YY/MM/DD','NLS_DATE_LANGUAGE=KOREAN'),'YY/MM/DD')
to_date 는 문자를 날짜로 바꾸는 함수인데.
문자가 와야 할 자리에 날짜(sysdate) 이 와있네요.
문자가 와야 할 자리에 날짜가 오니 이를
자동으로 문자로 형변환하는 과정에서 에러가 난듯 합니다.
또한 yy, mm, dd 와 같이 단순 숫자로 표현되는 포멧은
language에 영향을 받지 않죠.
mon 이나 month, day 와 같이 텍스트로 표현되는 것만 language에 영향을 받죠.
굳이 nls_date_language 구문은 불필요합니다.
수정 : TO_CHAR(SYSDATE - 60, 'YY/MM/DD')


3. C.DO_DATE 를 VARCHAR2(8) 로 바꾸셨다면?
A.PLANDATE = TO_CHAR(TO_DATE(C.DO_DATE(+),'YYYYMMDD','NLS_DATE_LANGUAGE=KOREAN'),'YYYYMMDD')
이구문은 정말 쓸데 없는 구문이네요.
수정 : A.PLANDATE = C.DO_DATE(+)

마농(manon94)님이 2012-10-15 08:36에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39690날짜 기간(일수) 구하는 쿼리 도움 부탁드립니다. [2]
Jacob
2012-10-18
5935
39689주 단위 누적치 계산 방법??? [4]
누적계산
2012-10-17
5741
39688tablespace 일별/시간별 총사용량 구하기 질문 ㅠ [1]
DB초보사람
2012-10-16
6221
39687ORA-01843 재질문 ㅠ.ㅠ [1]
해외
2012-10-13
5104
39686문자열을 분리해서 종으로 표시하고 싶습니다. [2]
이병국
2012-10-12
4857
39685[질문]해당 주에 시작과 끝 일자 구하기 [3]
물새
2012-10-12
6570
39684쿼리 파싱 : 실행한 쿼리를 분석하기 [3]
이병국
2012-10-12
5126
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다