VALIDATE_CONVERSION FUNCTION

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 validate_conversion özelliğinin ne 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.

Şimdi validate_conversion fonksiyonunu açıklamaya başlayalım.
Yazdığımız SQL ve PL/SQL kodlarında veri tipi çevirim problemleri ile sıkça karşılaşmaktayız. Bu tarz durumlar ile karşılaştığımızda çoğu zaman uygulamamız crash alıp kontrolsüz bir şekilde sonlanabiliyor. Yeni gelen bu fonksiyon tam olarak ta veri tipi çevirimleri problemleri yaşadığımız noktada yardımımıza koşmakta. Fonksiyonun çalışma mantığı aslında oldukça basit. Fonksiyona verdiğimiz parametrenin yine verdiğimiz veri tipine dönüşüp dönüşemeyeceğini test edip geriye 1 veya 0 döndürüyor. Eğer gönderdiğimiz parametrelere ilişkin dönüşüm yapılabiliyorsa sonuç 1 olarak geri dönüyor. Eğer dönüşüm yapılamıyorsa sonuç 0 olarak geri dönüyor. validate_conversion fonksiyonunu aşağıdaki veri tipi dönüşümlerini test etmek için kullanabiliyoruz.

  • number
  • date
  • timestamp
  • timestamp with time zone
  • binary_float
  • binary_double
  • interval day to second
  • interval year to month

Şimdi nasıl kullanıldığı ile ilgili çeşitli örnekler yapalım.

select validate_conversion('test123' as number)                 test1 from dual;--0 
select validate_conversion(300 as number)                       test2 from dual;--1
select validate_conversion('01012017' as date,'mmddyyyy')       test3 from dual;--1
select validate_conversion('31012017' as date,'mmddyyyy')       test4 from dual;--0
select validate_conversion('31-jan-2017' as date,'dd-mon-yyyy') test5 from dual;--1

validate_conversion

Şimdi daha farklı kullanım şekillerine bakalım;

SELECT *
FROM hr.employees emp
WHERE VALIDATE_CONVERSION(emp.employee_id AS NUMBER) = 1;

SELECT VALIDATE_CONVERSION(emp.employee_id AS NUMBER) emp_id_test,
employee_id
FROM hr.employees emp;

SELECT DECODE(VALIDATE_CONVERSION(emp.employee_id AS NUMBER),0,
'NOT NUMBER',1,'NUMBER','N/A') emp_id_test,employee_id
FROM hr.employees emp;

SELECT case when VALIDATE_CONVERSION(emp.employee_id AS NUMBER) = 1 
then 
emp.employee_id else -1 end emp_id_test,
employee_id
FROM hr.employees emp;

Gelen bu özellik, SQL ve PL/SQL kod blokları içerisinde data validation için yazdığımız kodların karmaşıklığını azaltıp uygulama performansımızı bu noktada arttıracağı kanısındayım. Data conversion için native bir kod desteği gelmesi bu bağlamda oldukça önemli bir gelişme oldu.

 

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