2018년 12월 23일 일요일

(오라클교육)(오라클학원/오라클교육/오라클 NLS 파라미터)NLS_DATE_FORMAT, NLS_LANG, NLS_LANGUAGE, NLS_TERRITORY_Oracle NLS Parameter


(오라클학원/오라클교육/오라클 NLS 파라미터)NLS_DATE_FORMAT, NLS_LANG, NLS_LANGUAGE, NLS_TERRITORY_Oracle NLS Parameter  
오라클 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′로 설정 할 수 있다.

댓글 없음:

댓글 쓰기