(오라클SQL강좌)오라클 NLS 파라미터_NLS_DATE_FORMAT, NLS_LANG, NLS_LANGUAGE,...

7
오라클 NLS 파라미터

Transcript of (오라클SQL강좌)오라클 NLS 파라미터_NLS_DATE_FORMAT, NLS_LANG, NLS_LANGUAGE,...

오라클 NLS 파라미터

오라클 NLS Parameters

NLS(National Language Support)는 언어 지원과 관련된 파라미터를 지칭하며

SQL*PLUS등에서 확인 하려면 다음과 같이 조회한다.

SQL> show parameter nls

NAME TYPE VALUE

----------------------- ------ --------

nls_calendar string //sysdate등에서 보이는 캘린더 데이터 포맷

nls_comp string BINARY //where절, PL/SQL안의 NLS데이터 비교 방법

nls_currency string

nls_date_format string

nls_date_language string

nls_dual_currency string

nls_iso_currency string

nls_language string AMERICAN

nls_length_semantics string BYTE

nls_nchar_conv_excp string FALSE

nls_numeric_characters string

nls_sort string

nls_territory string AMERICA

nls_time_format string

nls_time_tz_format string

nls_timestamp_format string

nls_timestamp_tz_format string

NLS_DATE_FORMAT이란?

테이블의 날짜형 칼럼에 값을 입력 시 DATE형으로 만들어 입력을 하거나 NLS_DATE_FORMAT에

맞는 문자열이라면 문자열로 입력이 가능하다. 가끔 날짜형에 문자를 넣을 때 FORMAT이 맞지

않아 애로사항이 있을 수 있으니 NLS_DATE_FORMAT 값을 알고 그 형식대로 문자열을 입력하면

된다.

실제 날짜 표기(TO_CHAR, TO_DATE 실행시) “월요일”, “MON” 으로 표시를 좌우하는

NLS_DATE_FORMAT 값은 NLS_LANGUAGE 을 따른다.

NLS_DATE_FORMAT은 현재 시스템의 기본 날짜 입출력 형태를 지정하는 파라미터 이며

TO_CHAR, TO_DATE 함수의 기본 DATE FORMAT이다.

SQL> select * from nls_session_parameters

2 where parameter = 'NLS_DATE_FORMAT';

PARAMETER VALUE

------------------- -----------------------------------------

NLS_DATE_FORMAT RR/MM/DD

SQL> select sysdate from dual;

SYSDATE

--------

16/09/07

SQL> create table datetest (

2 mydate date

3 );

테이블이 생성되었습니다.

SQL> insert into datetest values ('16/10/01');

1 개의 행이 만들어졌습니다.

SQL> insert into datetest values ('16-10-02');

1 개의 행이 만들어졌습니다.

SQL> insert into datetest values ('20161003');

1 개의 행이 만들어졌습니다.

SQL> insert into datetest values ('161004');

1 개의 행이 만들어졌습니다.

SQL> insert into datetest values ('10-06-2016');

insert into datetest values ('10-06-2016')

*

1행에 오류:

ORA-01830: 날짜 형식의 지정에 불필요한 데이터가 포함되어 있습니다

SQL> select * from datetest;

MYDATE

--------

16/10/01

……

-- NLS_DATE_FORMAT에 맞지 않는 문자열이라면 DATE형으로 형변환해서 입력하면 된다.

SQL> insert into datetest values (to_date('10-06-2016','dd-mm-yyyy'));

1 개의 행이 만들어졌습니다.

SQL> select * from datetest;

MYDATE

--------

16/10/01

……

16/10/06

-- NLS_DATE_FORMAT을 변경하여 현재 시스템의 날짜 입출력 포맷을 바꾸자.

SQL> alter session set nls_date_format='yyyy.mm.dd';

세션이 변경되었습니다.

SQL> select * from datetest;

MYDATE

----------

16.10.01

……

16.10.06

-- NLS_LANGUAGE값을 한국어로 바꾸자. NLS_DATE_FORMAT은 NLS_LANGUAGE값을 따른다.

SQL> alter session set nls_language='KOREAN';

세션이 변경되었습니다.

-- 요일을 단축형과 전체표기 방식으로 표시

SQL> SELECT TO_CHAR(sysdate,'DAY'), TO_CHAR(sysdate,'DY') from DUAL;

TO_CHAR(S TO_C

--------- ----

화요일 화

SQL> alter session set nls_language='AMERICAN';

Session altered.

SQL> SELECT TO_CHAR(sysdate,'DAY'), TO_CHAR(sysdate,'DY') from DUAL;

TO_CHAR(SYSDA TO_CHA

------------- ------

TUESDAY TUE

-- 월을 단축/축약형태로 표시(한글로 월표시는 단축형과 전체표기방식으로 표시하는 것이 같다.)

SQL> alter session set nls_date_format = 'YYYY-MON-DD';

세션이 변경되었습니다.

SQL> select hiredate from emp where rownum < 3;

HIREDATE

----------------

1980-12월-17

1981-2월 -20

-- 월을 전체표기 방식으로 표시하자.

SQL> alter session set nls_date_format = 'YYYY-MONTH-DD';

세션이 변경되었습니다.

SQL> select hiredate from emp where rownum < 3;

HIREDATE

--------------

1980-12월-17

1981-2월 -20

SQL> alter session set nls_language='AMERICAN';

Session altered.

-- 요일을 단축형과 전체표기 방식으로 표시

SQL> SELECT TO_CHAR(sysdate,'DAY'), TO_CHAR(sysdate,'DY') from DUAL;

TO_CHAR(SYSDA TO_CHA

------------- ------

SUNDAY SUN

-- 영문의 경우 단축형과 전체표기 방식이 다르다. 단축형은 3글자만 표시한다.

SQL> alter session set nls_date_format = 'YYYY-MON-DD';

Session altered.

SQL> select hiredate from emp where rownum < 3;

HIREDATE

--------------

1980-DEC-17

1981-FEB-20

SQL> alter session set nls_date_format = 'YYYY-MONTH-DD';

Session altered.

SQL> select hiredate from emp where rownum < 3;

HIREDATE

---------------------

1980-DECEMBER -17

1981-FEBRUARY -20

NLS_LANG, NLS_LANGUAGE, NLS_TERRITORY

NLS_LANG : 오라클 데이터베이스의 환경변수 값이 아니라 사용자 환경을 Oracle DB 알려주는 역

할을 하는 환경변수.

NLS_LANG = [언어]_[영역].[문자셋]

<language>_<Territory>.<client characterset>

예) AMERICAN_AMERICA.KO16KSC5601, AMERICAN_AMERICA.UTF8, KOREAN_KOREA.KO16KSC5601

언어 :현재 사용자가 사용하는 언어적 특성을 결정짓는 값

문자셋, 정렬방식, 날짜 표기에 사용되는 기호(년/월/일, YYYY/MM/DD)

Default 값은 AMERICAN 이다.

실제 날짜 표기(TO_CHAR,TO_DATE 실행시 - 월요일, MON 으로 표시를 좌우하는

NLS_DATE_FORMAT 값은 NLS_LANGUAGE 을 따른다.

영역 :현재 사용자 언어의 영역의 특성을 결정짓는 값

Language 값만 설정하면, Language 값을 따른다. ( KOREAN ==> KOREA )

문자셋 :현재 사용자의 시스템이 인식할 수 있는 문자셋의 값

만약에 Windows Client에서 한국어 환경을 사용하는 경우 NLS_LANG 값

을′KOREAN_KOREA.KO16MSWIN949′로

유닉스 Client에서 한국어를 입출력한다면 다음과 같이 NLS_LANG

을 ′KOREAN_KOREA.KO16KSC5601′로 설정 할 수 있다.