2016-09-20 1 views
1

SQLPlus와 SQL Developer간에 다른 동작이 발생합니다.SQLPLus와 SQLDeveloper 동작

예 데이터 :

이제
create table test (
    INIT_DATE DATE 
); 

INSERT INTO test(INIT_DATE) values (sysdate); 
COMMIT; 

I 실행 다음 쿼리 (INIT_DATE 이미 날짜이기 때문에 우리는 불필요한 TO_DATE하고있어주의) :

select to_date(INIT_DATE, 'dd/mm/rrrr') from test; 

결과는 다음과 같습니다

  • SQLPlus => 반환 20/09/16
  • SQLDeveloper = > 나는 'DD/MM은/RR'에 NLS> 형식의 날짜를 변경 SQLDeveloper에 있도록 ORA-01861

내가, this answer을 발견 던져 지금 20/09/16을 반환 SQLDeveloper. SQLDeveloper에서 나는 ': MI : DD/MM/RR HH24 SS'에 NLS를 변경하는 경우

그러나 다시, 나는 'DD/MM은/RR'에 쿼리 마스크를 변경, 다시 오류를 반환 SQLDeveloper :

select to_date(INIT_DATE, 'DD/MM/RR') from test; 
  • 누구든지이 동작을 설명 할 수 있습니까?
  • 쿼리 마스크가 'DD/MM/RR'이지만 NLS가 'DD/MM/RR'인 경우 SQLDeveloper에서 오류가 발생하는 이유는 무엇입니까?
+0

왜이 열이 이미 DATE 유형이있는 경우 TO_DATE 기능을 통해 DATE 타입으로 INIT_DATE 열을 변환하려고? – AlexSmet

+0

이 변환은 오류입니다. SQLPlus와 함께 실행 되었기 때문에 SQLDeveloper를 사용하여 다시 설치할 수 없으므로이 오류가있는 구체화 된보기가 프로덕션에 설치되었습니다. SQLPlus와 SQLDeveloper의 차이점을 이해하고 이러한 테스트를 준비했습니다. – ARIS

답변

1

DATE를 TO_DATE 함수로 변환하지만 TO_DATE 함수 인수는 문자열이므로 결과로 Oracle은 INIT_DATE 열을 string으로 변환 한 후이 문자열을 TO_DATE 함수로 전달합니다.

암시 적 변환 'string to date'또는 'date to string'을 사용하는 경우 Oracle은 기본 날짜 형식을 사용합니다. 다른 환경에서는 기본 날짜 형식이 다를 수 있습니다.

명시 적 변환 및 적절한 형식을 사용해보십시오. 예를 들어 는 :

select to_date(to_char(INIT_DATE, 'dd/mm/rrrr'), 'dd/mm/rrrr') from test;

2

TO_DATE 대신 TO_CHAR을 사용하십시오. TO_DATE 함수는 두 번째 매개 변수에 지정된 특정 형식의 char 인수를 날짜 값으로 변환합니다.

INIT_DATE가 날짜이기 때문에

select to_date(INIT_DATE, 'DD/MM/RR') from test; 

가 먼저 암시 적 변환는 char 않는 문. 이 변환은 기계 설정에 따라 nls 기본 형식입니다.

+1

암시 적 변환의 단계를 보려면 먼저 SELECT to_char (sysdate) FROM dual을 시도하십시오. 그런 다음 to_date() 호출에 전달할 문자열임을 확인하십시오. – jva