Veri Tipi Çevrimlerinin Kontrollü Yapılması

Herkese Selam,
Bu yazıda sizlere Oracle 12c Release 2 ile beraber SQL tarafında yeni gelen bir fonksiyondan bahsedeceğim. Umarım farkındalık anlamında faydalı bir yazı olur.

Oracle 12c Release 2 ile beraber gelen yeni özelliklerin bazılarını linkteki yazıda paylaşmıştım. Şimdi bu özelliklerden biri olan cast fonksiyonunun yeni özelliklerindenne işe yaradığından ve nasıl kullanıldığını göstereceğim.

cloudÖncelikle şunu belirtmeliyim ki, Oracle 12c Release 2 hala download edilebilir formatta Oracle tarafından yayınlanmadı. Dolayısıyla bu ve yeni gelen özellikleri kendi lokal makinenize indirip test yapamayacağız. Bu durumda elimizde bu özellikleri test edebileceğimiz iki seçenek mevcut bunlardan birincisi Oracle Public Cloud üzerinden başvuruda bulunup, akabinde bir cloud hesap edinip burada denemek (Nasıl yapılacağını linki takip ederek öğrenebilirsiniz).

livesqlİkinci yöntem ise Oracle’ın Live SQL platformu üzerinden testleri yapmak (LiveSQL ile ilgili bilgiye linkten erişebilirsiniz.). Hem Oracle Public Cloud’da hemde Oracle LiveSQL Platformunda Oracle 12c Release 2 kurulu durumda. Ben bu yöntemlerden erişimi ve elde edilmesi daha kolay olan LiveSQL platformu tercih ettim. Sizde benzer bir tercih ile testlerinizi kolayca yapabilirsiniz.

Cast fonksiyonu bir çoğumuzun da bildiği üzere veri tipleri arasında dönüşüm yapmaya yarayan bir SQL fonksiyonu. Bu fonksiyon built-in veya collection-typed veri tiplerinden başka bir built-in veya collection-typed veri tiplerine tip dönüşümü yapabilmektedir. Kısaca nasıl çalıştığını hatırlayalım.

SELECT CAST ('123456' AS NUMBER) + 5 FROM DUAL;

CAST('123456'ASNUMBER)+5
------------------------
                  123461

SELECT CAST ('10.10.2017' AS DATE) + 5 FROM DUAL;

CAST('10.10.2017'ASDATE)+5
--------------------------
15/10/2017   

SELECT CAST (SYSDATE AS TIMESTAMP) FROM DUAL;

CAST(SYSDATEASTIMESTAMP)                          
--------------------------------------------------
14/2/2017 08:21:59,000000     

Evet fonskiyonun nasıl çalıştığını hatırladık ancak CAST fonksiyonuna 12c R2 öncesinde çevrim yapılamayacak veri tipleri gönderildiğinde fonksiyon hata alıyor ve program sonlanıyordu.

SELECT CAST ('sdfsj343' AS NUMBER) FROM DUAL; 
ORA-01722: invalid number

SELECT CAST ('7878987' AS DATE) castdate FROM DUAL;
ORA-01847: day of month must be between 1 and last day of month

Bu tarz hatalar uzun kod bloklarımız içerisinde işlediğimiz veri miktarına göre karşılaşma sıklığımızın oldukça fazla olduğu hata türlerinden. Özellikle Data Quality problemlerinin sık yaşandığı sistemlerde bu tarz problemler ile bir hayli karşılaşabiliyoruz. Oracle 12c R2 ile beraber bu fonksiyonu kullanırken olası tip uyumsuzlukları sonucunda oluşacak problemleri handle edecek bir mekanizma fonksiyona eklendi. Bu mekanizma ile beraber tip dönüşümlerinde alınacak hataları azaltma veya tamamen ortadan kaldırma adına bize yeni bir opsiyon sunulmuş olundu. Şimdi nasıl çalıştığına bakalım.

SELECT CAST ('fsweereg' AS DATE default sysdate on conversion error)
castdate1 from dual;

SELECT CAST ('fsweereg' AS DATE default '10-10-2017' on 
conversion error, 'DD-MM-YYYY') castdate2 from dual;

SELECT CAST ('fsdfs34' AS NUMBER default -99 on conversion error) 
castnumber from dual;

resultset

 

Örneklerden de görüleceği üzere olası bir hatalı çevrim durumunda default değerler tanımlayarak fonksiyonun kontrollü bir şekilde yoluna devam etmesini sağlayabiliyoruz.  Bu fonksiyon ile beraber gelen conversion error cümlesi to_number, to_date gibi diğer casting fonksiyonlarında da kullanılabilmektedir.

select to_number('32423fsfs'  default -99 on conversion error)
castdate from dual;

select to_date('32423fsfs'  default sysdate on conversion error)
castdate from dual;

select to_date('32423fsfs'  default '10-10-2017' on conversion error
, 'DD-MM-YYYY') castdate from dual;resultset2

 

Gelen bu özellik, SQL ve PL/SQL kod blokları içerisinde veri tipi dönüşümleri için yazdığımız kodların karmaşıklığını azaltıp uygulama performansımızı bu noktada arttıracağı kanısındayım. Veri tipi dönüşümünün kontrollü yapılabilmesi için native bir kod desteği gelmesi bu bağlamda oldukça önemli bir gelişme oldu.

KAYNAKLAR

https://docs.oracle.com/database/122/whatsnew.htm

Advertisements

About ... from Emrah METE

Bilgisayar Mühendisi
This entry was posted in Oracle, Uncategorized and tagged , , , , , , . Bookmark the permalink.

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