jump to navigation

Mensetting parameter NLS_XXX December 9, 2004

Posted by indooracle in Solving problem, Tutorial, Uncategorized.
trackback

Setting parameter NLS_

NLS_LANG parameter digunakan untuk mengatur general format dari database, seperti format tanggal, waktu, bahasa atau karakter yg digunakan, format mata uang (currency setting), kalender yg digunakan dan lain sebagainya. Yang harus di ingat adalah konfigurasi yg berlaku pada database Oracle tidak ada hubungannya dengan regional setting dari komputer yg digunakan.

Lalu hal apa yg menyebabkan pentingnya pembahasan mengenai konfigurasi format database Oracle?.

Apakah anda pernah mencoba proses insert atau update dan menemukan pesan kesalahan seperti yang terlihat pada contoh dibawah?

SQL> connect indooracle/dba@indooracle_db
Connected.
SQL> select sysdate from dual;

SYSDATE
-----------
21-SEP-2001

SQL> insert into table_contoh values ('12/12/99')

ERROR at line 1:
ORA-01843: not a valid month

Kejadian ini mungkin jarang dialami untuk anda-anda yg membangun suatu aplikasi yg tidak memperhitungkan lintas regional. Dan akan mengalaminya jika anda membangun aplikasi yg ditujukan untuk beberapa perusahaan yg berada di teority/negara yg berbeda.

sebelum lebih jauh marilah kita melihat hirarki dari NLS_ parameter.

  1. Database
  2. Instance ( berasal dari setting init.ora )
  3. Clint Side (berasal dari client environment atau setting registry )
  4. Session ( via perintah ALTER SESSION )

Lebih detail marilah kita membicarakan masing-masing tingkatan tersebut;

Parameter NLS_ pada Database

Configurasi parameter ini di tentukan dari variable environment NLS_TERRITORY pada saat pembuatan database. Dimana NLS_TERRITORY itu sendiri di turunkan dari parameter NLS_LANGUAGE. untuk AMERICA format tanggalnya adalah DD-MON-YY.

Parameter NLS_ pada Instance

Setting parameter ini ditentukan pada sebuah init.ora file, untuk mengetahui NLS yg terdapat pada init.ora melalui SQL*Plus yaitu dengan melihat melalui view NLS_INSTANCE_PARAMETERS.

SQL> select * from nls_instance_parameters;

PARAMETER                      VALUE
------------------------------ -------------
NLS_LANGUAGE                   AMERICAN
NLS_TERRITORY                  AMERICA
NLS_SORT
NLS_DATE_LANGUAGE
NLS_DATE_FORMAT
NLS_CURRENCY
NLS_NUMERIC_CHARACTERS
NLS_ISO_CURRENCY
NLS_CALENDAR
NLS_TIME_FORMAT
NLS_TIMESTAMP_FORMAT
NLS_TIME_TZ_FORMAT
NLS_TIMESTAMP_TZ_FORMAT
NLS_DUAL_CURRENCY
NLS_COMP

NLS_ pada configurasi Client

NSL parameter pada client ditentukan dalam registry dalam key HKEY_LOCAL_MACHINE\Software\Oracle (untuk aplikasi 32 Bit), sedangkan untuk aplikasi 16 Bit, setting NLS ditentukan pada oracle.ini. Yang harus diingat
adalah setting yg sebelumnya sudah didefiniskan pada Database atau Instance
akan secara otomatis ditimpa.

pada saat instalasi PC default NLS adalah NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 >> DD-MON-YY

Setting NLS instance pada init.ora ini hanya akan dipakai jika setting NLS_LANG dan NLS_DATE_FORMAT pada client tidak digunakan.

NLS_DATE_FORMAT dengan menggunakan SESSION

Untuk menimpa setting dari NLS parameter yg ada pada Database, instance
atau pun client, yaitu dengan menggunakan perintah ALTER SESSION secara
explicit.

SQL> alter session set nls_date_format='DD-MON-YYYY HH24:MI:SS';

dengan memanfaatkan NLS_SESSION_PARAMETERS kita dapat menampilkan effeknya yaitu kombinasi NLS setting dari Database, instancem, client dan session.

SQL> select * from nls_session_parameters;
PARAMETER                      VALUE
------------------------------ ------------------------------
NLS_LANGUAGE                   AMERICAN
NLS_TERRITORY                  AMERICA
NLS_CURRENCY                   $
NLS_ISO_CURRENCY               AMERICA
NLS_NUMERIC_CHARACTERS         .,
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD-MON-YYYY HH24:MI:SS
NLS_DATE_LANGUAGE              AMERICAN
NLS_SORT                       BINARY
NLS_TIME_FORMAT                HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT           DD-MON-YY HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZH:TZM
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-YY HH.MI.SSXFF AM TZH:T
NLS_DUAL_CURRENCY              $
NLS_COMP

15 rows selected.

Menghindari masalah perbedaan setting NLS

Dari penjelasan di atas dapat disimpulkan, bahwa proses pada aplikasi yang
berjalan akan tergantung pada setting NLS. Maka muncul sebuah pertanyaan:
bagaimana untuk menghindari perbedaan setting NLS ini?, Solusinya dapat dengan menggunakan fungsi konversi TO_CHAR() atau TO_DATE().

insert into table_name values
  ( TO_DATE( sDay||'-'||sMonth||'-'||sYear,'DD-MM-YYYY') );

* Di assumsikan sDay, sMonth dan sYear masing-masing berisi:
’12’ –> tanggal
’12’ –> Bulan
‘2001’ –> Tahun

Kesimpulan

Jika kita menemukan setting NLS (misalkan NLS_DATE_FORMAT) pada
init.ora tidak berfungsi, maka yg dapat dilakukan adalah mengganti setting pada
registry yang berada pada

HKEY_LOCAL_MACHINE\Software\Oracle

atau, dengan menggunakan perintah ALTER SESSION,

SQL> alter session set nls_date_format=’DD-MON-YYYY HH24:MI:SS’;atau jika anda menggunakan Oracle 8i, release 8.1

create or replace trigger data_logon_trigger
after logon
ON DATABASE
begin
execute immediate
  'alter session set nls_date_format = ''yyyymmdd'' ';
end;
/

Ok!… sekian saja…

Comments»

1. regex856 - February 18, 2009

nanya donk pak,…

kalo mo ngubah nama bulan (English ke Indo), misal January jadi Januari, etc. dari setingan apa, dan gimana caranya yawh…?

terima kasih sebelumnya.

faridh tampan - April 7, 2010

SELECT DISTINCT RTRIM(INITCAP(TO_CHAR(TANGGAL,’MONTH’,’NLS_DATE_LANGUAGE=INDONESIAN’)))||’ ‘||TO_CHAR(TANGGAL,’YYYY’)SALES_PERIOD
INTO XX FROM TABLE
WHERE NO_RR = :RR_NO AND WAREHOUSE = :XSTORE;

2. faridh tampan - April 7, 2010

itu cong querynya lu pelajarin yach NLS_DATE_LANGUAGEnya hehehehe


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: