Oracle da tarih problemleri
Database üzerinde işlem yapanlar bilir tarih, dölge ve dil farklılıkları genellikle problem çıkartır. Öyle ki geçenlerde gördüğüm bir durumu paylaşayım. Bir rapor yapıyorsunuz ve yaptıgınız rapor localinizde farklı başka bilgisayarlarda farklı sonuc veriyor . Bu gibi durmlarda hemen “Oracle bozuk, toad bozuk” gibi bahanelere başvuruz ama oracle hata yapmaz. Raporun farklı cıkmasının sebebi ise bölge farklılıklarından kaynaklanıyor . Localinizdeki ayarlar TR raporu kullanan başka bilgisayarın bölge ayarları diyelimki ABD. Ek bir bilgi olarak biz oracle a tarihi gun , ay yıl olarak versek bile o kendi içerisinde bunu gun ay yil saat dakika ve saniye olarak ( 01.01.2010 00:00:00) tutar. Peki bu problemı nasıl çözeriz.
O an aktif session ın terriory (bölge) ayarlarını değiştirmek problemımızı çözecektir. Ama dikkatli olmalıyız işimiz bittikten sonra eski territory bilgilerini geri yuklemeliyiz
–suanki bolge bilgisini bir değişkende saklıyoruz
SELECT PRM.VALUE INTO TEMP FROM NLS_SESSION_PARAMETERS PRM WHERE PRM.PARAMETER = ‘NLS_TERRITORY’;
–sessionın terrritorysini TURKEY olarak ayarlıyoruz
execute immediate ‘alter session set NLS_TERRITORY=”TURKEY”’;
–eski bolge bilgisini bir geri yukluyoruz
execute immediate ‘alter session set NLS_TERRITORY= ‘||TEMP;
**Bölge bilgisini tekrar geri yüklemeliyiz şöyle bir durumuda goz onunde bulundurmak gerekir birşey oldu ve sorgumuz bir exception fırlattı be bizim komutumuz tamamlanmadı. Bu durumda da kodumuzu exception kısmınada ekliyoruz
Exception
When No_Data_Found Then
execute immediate ‘alter session set NLS_TERRITORY= ‘||TEMP;