Mensetting parameter NLS_XXX
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_dbKejadian 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.
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
sebelum lebih jauh marilah kita melihat hirarki dari NLS_ parameter.
- Database
- Instance ( berasal dari setting init.ora )
- Clint Side (berasal dari client environment atau setting registry )
- Session ( via perintah ALTER SESSION )
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 diingatadalah 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 yangberjalan akan tergantung pada setting NLS. Maka muncul sebuah pertanyaan:
bagaimana untuk menghindari perbedaan setting NLS ini?.
insert into table_name values* Di assumsikan sDay, sMonth dan sYear masing-masing berisi:
( TO_DATE( sDay||'-'||sMonth||'-'||sYear,'DD-MM-YYYY') );
'12' --> tanggal
'12' --> Bulan
'2001' --> Tahun
Kesimpulan
Jika kita menemukan setting NLS (misalkan NLS_DATE_FORMAT) padainit.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_triggerOk!... sekian saja...
after logon
ON DATABASE
begin
execute immediate
'alter session set nls_date_format = ''yyyymmdd'' ';
end;
/
0 Comments:
Post a Comment
<< Home