ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ORA-01861:literal does not match format string 일때
    Database/Oracle 2011. 1. 18. 18:48
    반응형
    NLS_SESSION_PARAMETERS 변경

    우선 

     select TO_DATE(:P_ORDERDT)
      from dual;

    여기에 값을 '20110103' 로 실행했을때 아래의 에러를 발생킨다



    '03JUL2011'등 으로 에러가 발생하지 않는다면

    select * from NLS_SESSION_PARAMETERS 로 확인한다
     NLS_DATE_FORMAT이 'DD/MON/RR' 형식등으로 되어있을것이다



    팁: 토드에서 F5로 스크립트 실행 시켜주면 SQLPLUS로 접속하지않아도 쉽게 변경 할 수 있다

    아래는 한국에서 쓸때 샘플 타입을 나열한것이다



    -- NLS_SESSION_PARAMETERS 타입 바꾸기 
     select * from NLS_SESSION_PARAMETERS
           
      ALTER SESSION SET NLS_LANGUAGE='KOREAN';
      
    --NLS_LANGUAGE    KOREAN
    --NLS_TERRITORY    KOREA
    --NLS_CURRENCY    \
    --NLS_ISO_CURRENCY    KOREA
    --NLS_NUMERIC_CHARACTERS    .,
    --NLS_CALENDAR    GREGORIAN
    --NLS_DATE_FORMAT    RR/MM/DD
    --NLS_DATE_LANGUAGE    KOREAN
    --NLS_SORT    BINARY
    --NLS_TIME_FORMAT    HH24:MI:SSXFF
    --NLS_TIMESTAMP_FORMAT    RR/MM/DD HH24:MI:SSXFF
    --NLS_TIME_TZ_FORMAT    HH24:MI:SSXFF TZR
    --NLS_TIMESTAMP_TZ_FORMAT    RR/MM/DD HH24:MI:SSXFF TZR
    --NLS_DUAL_CURRENCY    \
    --NLS_COMP    BINARY
    --NLS_LENGTH_SEMANTICS    BYTE
    --NLS_NCHAR_CONV_EXCP    FALSE







    DATE Format을 변경하는 방법.

    질문

      오라클이 현재는 RR/MM/DD로 default date format으로 되어 있는데, 세션에서 변경하는 방법 말고 영구적으로 default date format을 변경하는 방법이 무엇인지 궁금합니다.

    답변

      DATE Format을 변경하는 방법은 크게는 4가지 방법이 있습니다. 여기서 4번은 일회성이고 나머지 1-3은 반 영구적인 변경방법 입니다.

    1. INIT[dbname].ora 화일 수정
    • NLS_DATE_FORMAT = 'RR-MM-DD' 이와 같이 변수와 값을 추가.

    2. Shell 프로그램 이용
    • - C Shell: OS 상태에서 setenv NLS_DATE_FORMAT 'RR/MM/DD'추가.
    • - B Shell: NLS_DATE_FORMAT='RR/MM/DD' export NLS_DATE_FORMAT 추가.
    • - K Shell: B Shell 방법과 추가로 export NLS_DATE_FORMAT='RR/MM/DD' 로 표현 가능

    3. SYS.PROPS$ VIEW를 이용하여 UPDATE하는 방법

    4. Session 에서 set 하는 방법
    • - SQLPLUS 상태에서 ALTER SESSION SET NLS_DATE_FORMAT='RR/MM/DD' 실행
    • - 단 SESSION 내에서만 활용가능





    오라클을 설치 하였을시에.. 

    언어설정이 잘못되어지면 프로그램 구동시 한글이 꺠지는 현상이 발생하게 됩니다. 

    그럴시에는 DB의 언어를 바꾸어야 되는데요. 

    일반적으로는 레지스트리의 언어 변경 방법을 마니 쓰게 됩니다. 

    하지만 DB 생성시에 언어를 정확하게 바꾸기 위해서는... 쿼리로 DB를 설정 하는 방법이 가장 좋은 방법입니다. 

    언어별 UPDATE 치는 방법을 소개 하겠습니다. 

    update sys.props$ set value$='KO16KSC5601' where name='NLS_CHARACTERSET'; 

    update sys.props$ set value$='KO16KSC5601' where name='NLS_NCHAR_CHARACTERSET'; 

    update sys.props$ set value$='AMERICAN_AMERICA.KO16KSC5601' where name='NLS_LANGUAGE'; 

    현재 저장된 nls 파라미터 보기 
    select * from v$nls_parameters; 

    DB 종료 후 

    STARTUP MOUNT; 
    ALTER SYSTEM ENABLE RESTRICTED SESSION; 
    ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; 
    ALTER SYSTEM SET AQ_TM_PROCESSES=0; 
    ALTER DATABASE OPEN; 

    -- ko16ksc5601 
    update sys.props$ set value$='KO16KSC5601' where name='NLS_CHARACTERSET'; 
    update sys.props$ set value$='KO16KSC5601' where name='NLS_NCHAR_CHARACTERSET'; 
    update sys.props$ set value$='AMERICAN_AMERICA.KO16KSC5601' where name='NLS_LANGUAGE'; 

    or 

    update sys.props$ set value$='KOREAN_KOREA.KO16KSC5601.KO16KSC5601' where name='NLS_LANGUAGE'; 

    update sys.props$ set value$='us7ascii' where name='NLS_CHARACTERSET'; 
    update sys.props$ set value$='utf8' where name='NLS_NCHAR_CHARACTERSET'; 
    update sys.props$ set value$='AMERICAN_AMERICA.US7ASCII' where name='NLS_LANGUAGE'; 

    -- ko16mswin949 
    update sys.props$ set value$='KO16MSWIN949' where name='NLS_CHARACTERSET'; 
    update sys.props$ set value$='KO16MSWIN949' where name='NLS_NCHAR_CHARACTERSET'; 
    update sys.props$ set value$='KOREAN_KOREA.KO16MSWIN949' where name='NLS_LANGUAGE'; 

    -- UTF8 
    update sys.props$ set value$='UTF8' where name='NLS_CHARACTERSET'; 
    update sys.props$ set value$='UTF8' where name='NLS_NCHAR_CHARACTERSET'; 
    update sys.props$ set value$='KOREAN_KOREA.UTF8' where name='NLS_LANGUAGE'; 

    commit; 
    [이 게시물은 사랑니님에 의해 2009-08-02 15:42:03 DB에서 이동 됨]






    select * from sys.props$ 

    select * from sys.props$ where name='NLS_DATE_FORMAT';
    update sys.props$ set value$='RR/MM/DD' where name='NLS_DATE_FORMAT';
    select * from sys.props$ where name = 'NLS_DATE_FORMAT';

    select * from sys.props$ where name='NLS_TIME_FORMAT';
    update sys.props$ set value$='HH24:MI:SSXFF HH24:MI:SSXFF' where name='NLS_TIME_FORMAT';
    select * from sys.props$ where name = 'NLS_TIME_FORMAT';

    select * from sys.props$ where name='NLS_TIMESTAMP_FORMAT';
    update sys.props$ set value$='RR/MM/DD HH24:MI:SSXFF' where name='NLS_TIMESTAMP_FORMAT';
    select * from sys.props$ where name = 'NLS_TIMESTAMP_FORMAT';

    select * from sys.props$ where name='NLS_TIME_TZ_FORMAT';
    update sys.props$ set value$='HH24:MI:SSXFF TZR' where name='NLS_TIME_TZ_FORMAT';
    select * from sys.props$ where name = 'NLS_TIME_TZ_FORMAT';

    select * from sys.props$ where name='NLS_TIMESTAMP_TZ_FORMAT';
    update sys.props$ set value$='RR/MM/DD HH24:MI:SSXFF TZR' where name='NLS_TIMESTAMP_TZ_FORMAT';
    select * from sys.props$ where name = 'NLS_TIMESTAMP_TZ_FORMAT';



    update sys.props$ set value$='RR/MM/DD' where name='NLS_DATE_FORMAT';
    update sys.props$ set value$='HH24:MI:SSXFF HH24:MI:SSXFF' where name='NLS_TIME_FORMAT';
    update sys.props$ set value$='RR/MM/DD HH24:MI:SSXFF' where name='NLS_TIMESTAMP_FORMAT';
    update sys.props$ set value$='HH24:MI:SSXFF TZR' where name='NLS_TIME_TZ_FORMAT';
    update sys.props$ set value$='RR/MM/DD HH24:MI:SSXFF TZR' where name='NLS_TIMESTAMP_TZ_FORMAT';



    Error: Unhandled Exception: System.Data.OracleClient.OracleException: 
           ORA-12705: Cannot access NLS data files or invalid environment specified
    Cause:
    • You have Oracle or Oracle development tools installed locally (or on the machine running the application).
    Resolution:
    • Check to see if [HKLM/Software/Oracle] exists. Chances are it does.
    • Within the Oracle key, look to see if NLS_LANG exists.
    • If it does, do one of the following: rename to NLS_LANG.OLD, or delete it entirely. Providing a valid language such as AMERICAN_AMERICA.WE8MSWIN1252 would also resolve the issue. Single-byte character sets include US7ASCIIWE8DEC,WE8MSWIN1252, and WE8ISO8859P1. Unicode character sets include UTF8AL16UTF16, and AL32UTF8.

    추가 팁 

    *오라클 클라이언트나 DB가 먼저 설치 되었으며 다른 버전이 설치 되었을때

    Code Sample

     Environment.SetEnvironmentVariable("PATH", Environment.CurrentDirectory + "\\ODP\\", EnvironmentVariableTarget.Process);
                    Environment.SetEnvironmentVariable("ORACLE_HOME", Environment.CurrentDirectory + "\\ODP\\", EnvironmentVariableTarget.Process);
                    Environment.SetEnvironmentVariable("ORA_TZFILE", null);
                    String nlsLang = Environment.GetEnvironmentVariable("NLS_LANG");
                    if (String.IsNullOrEmpty(nlsLang))//KOREAN_KOREA.KO16MSWIN949
                        Environment.SetEnvironmentVariable("NLS_LANG", string.Empty);
                    Environment.SetEnvironmentVariable("NLS_DATE_FORMAT", "RR/MM/DD");
                    Environment.SetEnvironmentVariable("NLS_TIME_FORMAT", "HH24:MI:SSXFF");
                    Environment.SetEnvironmentVariable("NLS_TIMESTAMP_FORMAT", "RR/MM/DD HH24:MI:SSXFF");
                    Environment.SetEnvironmentVariable("NLS_TIME_TZ_FORMAT", "HH24:MI:SSXFF TZR");
                    Environment.SetEnvironmentVariable("NLS_TIMESTAMP_TZ_FORMAT", "RR/MM/DD HH24:MI:SSXFF TZR");
    반응형

    'Database > Oracle' 카테고리의 다른 글

    골든32 사용시 설정사항  (3) 2013.05.07

    댓글

Designed by Tistory.