SlideShare uma empresa Scribd logo
1 de 25
Oracle Regular Expression Volkan ÇAMAŞ
Senior BI Consultant
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
GÜNDEM
 RegEx Nedir ?
 RegEx Kullanım Alanları
 Pattern Nedir ?
 Oracle RegEx Fonksiyonları
 Metacharacters
 Match Parameters
 Oracle RegEx Fonksiyon Örnekleri
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Regular Expression Nedir ?
 String içerisinde belli bir kelime ya da daha karmaşık olan belli bir dizilime sahip
bir bilgiyi bulmak için kullanılan bir metoddur. Arama işleminde belli bir kural
dahilinde uzunluk ve tip belirtip buna uygun verileri tespit etmemizi
sağlamaktadır.
 Örneğin , web sitelerinde şifre tanımlamalarında en az bir noktalama
işareti olmalıdır diye bir uyarı verilir. Bu doğrulamayı kolaylıkla RegEx ile
yapabiliriz.
 Günümüzde yazılım dillerinin başlıcaları (Phyton ,C#, Java , SQL, Javascript vb.)
regular expression kütüphaneleri ile bu yöntemi sağlamaktadır. Bu yazıda Oracle
Db üzerinde regular expression fonksiyonları nelerdir, bu fonksiyonlar ile hangi
problemlere çözüm bulabiliriz örnekler ile inceleyeceğiz.
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Regular Expression Kullanım Alanları
 Regular expression kullanımı genelde kompleks bir aramaya ihtiyaç
duyulduğunda başvurulan bir metoddur.
 Genel olarak kullanım alanı database’den çok application ya da client(Java , C#,
Javascript vb.) tarafında diyebiliriz.
 Email , password validasyonu
 Kredi kartı , IBAN validasyonu
 Telefon , posta kodu
 Kompleks arama ( HTML kodu içerisinde sadece img tag’i arama)
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Pattern nedir ?
 Pattern, yazılım ile ilgili bir çok konu alanında farklı anlamlar ifade
edebilmektedir. Regular expression konu alanı için ise pattern aranılan verinin
deseni veya şablonu diyebiliriz. Kimlik numarasının 11 haneli , kredi kartının 16
haneli ya da e-posta adreslerinin @ işareti içermesi bu tip verilerin
desenidir(pattern) diyebiliriz.
 RegEx patterni oluşturmak için ise bazı bileşenler gerekmektedir.
 Metacharacters
 Character class
<?! pattern @%>
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Oracle Regular Expression Fonksiyonları
SQL Fonksiyonu Açıklama
REGEXP_LIKE
Belirtilen pattern doğrultusunda karakter seti içerisinde arama yapmak için kullanılır.
WHERE koşulunda kullanıldığında eşleşen kayıtlar seçilebilir.
REGEXP_REPLACE
Karakter dizisinde belirtilen patterndeki eşleşen değerleri arar ve değiştirilmesi istenen
değer ile günceller.
REGEXP_INSTR
Verilen regular expression patternin hangi indexten itibaren başladığını belirtir.
REGEXP_SUBSTR
Regular expression patterni ile eşleşen ilk değeri döndürür.
REGEXP_COUNT
Regular expression patterni ile eşleşen kaç adet veri seti olduğu sonucunu döndürür.
 Oracle’ın sunduğu regular expression fonksiyonları nelerdir aşağıdaki tabloda
açıklamaları ile birlikte yer almaktadır. Bu fonksiyonlar yardımıyla ihtiyaç
duyduğumuz sonuca uygun bir sorgu oluşturabiliriz.
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Metacharacters
Sembol Açıklama
* Sıfır veya daha fazla karakter anlamına gelir
|
Alternatif eşleşmeleri belirtmek için kullanılan
eşleşme operatörü (OR operatörü diyebiliriz.)
^/$ İle başlar / İle biter ifadesi için kullanılır
[ ]
Listede verilen ifadelerin herhangi biri ile eşleşen
eşleşme listesi köşeli parantez arasında belirtilir
{m} m defa eşleşme olacağını belirtir
{m , n} En az m kere fakat en fazla n kere eşleşme
[: : ]
Bir karakter sınıfını (character class) belirtir ve bu
sınıfta herhangi bir karakterle eşleşme

Kendinden sonraki özel karakterin stringe dahil
edilmesini sağlar
+ Bir ya da daha çok tekrarı eşler
? Sıfır yada bir tekrarı eşler
.
Desteklenen karakter setinde NULL hariç herhangi
bir karakteri eşler
( ) Tek bir alt-ifade olarak kullanılan gruplama ifadesi
[==] Eşitlik sınıflarını belirtir
n Geri-referans ifadesi
[..]
Çok karakterli bir eleman olarak bir harmanlama
elemanı belirtir
 Metacharacters regular expression için pattern oluşturmada kullanacağımız
formatlardır. Tek ya da çoklu olarak kullanılabilmektedir.
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Match parameter – Modes (Eşleştirme parametreleri)
Eşleştirme parametreleri tüm regular expression fonksiyonları için input değişkeni
olarak verilebilmektedir.
Aşağıda belirtilen değerler verilerek eşleştirme modları ihtiyacımıza göre
şekillendirilebilmektedir.
* Eğer birbiri ile zıt bir match parameter değeri verilirse Oracle son tanımlanan
değeri alır. Örneğin ‘ic’ şeklinde tanımlanırsa , oracle case-sensitive özelliği açık
olarak bir arama işlemi gerçekleştirir. Oracle’da tanımlı değerler dışında bir değer
verilirse hata almaktadır.
Sembol Açıklama
i
Küçük büyük harf duyarlılığı kapalı olarak arama
yapılır. (case insensitive)
c
Küçük büyük harf duyarlılığı açık olarak arama
yapılır. (case sensitive)
n
Herhangi bir karakterle eşleşecek ve aynı şekilde
yeni satır karakteriyle eşleşecektir
m
Multiline içeren string içerisinde arama yapılabilir.
Default halinde string tek satır olarak baz
alınmaktadır.
x
Aranılan pattern içerisinde boşluk karakterine izin
verir
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Character Class (Karakter sınıfı)
Karakter sınıfları bir grup ya da aralığı ifade eden karakter kümelerini barındırır.
Pattern tanımlamalarında ihtiyaç duyulan bir syntaxdir. Aşağıda sembol ve
açıklamalarına yer verilmiştir.
Sembol Açıklama
[:upper:] Büyük harfler [A-Z)]
[:lower:] Küçük harfler [a-z]
[:alpha:] Tüm harfler [A-Za-z]
[:alnum:] Rakam ve harfler [0-9A-Za-z]
[:digit:] Rakamlar [0-9]
[:xdigit:]
Hexadecimal digits {
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,a,b,c,
,d,e }
[:punct:]
Noktalama işaretleri
! " # $ % & ' ( ) * + , - . / : ; < = > ?
@ [  ] ^ _ ` { | } ~
[:blank:] Boşuk ve tab
[:space:] Boşluk karakteri
[:cntrl:]
Kontrol karakterleri
ASCII 000-037 aralığı ve 177(DEL)
[:graph:] [:alnum:] ve [:punct:]
[:print:] [:alnum:] , [:punct:] ve boşluk
[:word:] Rakamlar , harfler ve underscore
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Oracle Regular Expression Fonksiyonları
REGEXP_LIKE
REGEXP_LIKE(source_string, regexp_pattern , [modes] )
REGEXP_LIKE fonksiyonu, yalnızca verilen patterne uygun bir sonuç olup olmadığını
belirten boolean (true ya da false) bir sonuç döndürmesi sebebiyle diğer REGEX
fonksiyonlarına göre farklıdır. Eşleşmenin nerede ve nasıl sağlandığına dair bir sonuç
döndürmez.
Örnek olarak bir tablonun içinde ‘uç’ ile başlayan bazı kelimeler aradığımızı
varsayalım. (Uçak , Uçurtma ,Uçmak, Uçurum)
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, 'uç(urum)|(ak)|(mak)|(urtma)' , 'i')
*[] içinde yazılan input parametreleri zorunlu parametreler değildir.
‘i’ modes parametresi
ile incasesensitive
arama yapılmaktadır.
Parantez içinde ‘uç’ kelimesinden sonra
alabileceği değerler belirtilmeli ve ‘|’ karakteri
ile veya olduğunu belirten komut yazılmalıdır.
Parantez içinde ‘uç’ kelimesinden sonra
alabileceği değerler belirtilmeli ve ‘|’ karakteri
ile veya olduğunu belirten komut yazılmalıdır.
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Oracle Regular Expression Fonksiyonları
REGEXP_REPLACE
REGEXP_REPLACE(source_string, regexp_pattern, replacement, [position], [occurrence], [modes])
REGEXP_REPLACE fonksiyonu da yine bir Oracle fonksiyonu olan REPLACE
fonksiyonuna benzer şekilde, belirtilen pattern ile eşleşme yakalandığında input
olarak verilen replacement parametresi ile güncellenir.
Kullanım alanlarına veri formatlama, veri temizleme vb. örnekler verebiliriz.
Örneğin , telefon numarası veritabanında number olarak 5548366432 olarak
tutulduğunu varsayalım. Telefon numarasını (554) 836 64 32 olarak formatlamaya
ihtiyaç duyduğumuzda bu fonksiyon yardımıyla kolaylıkla oluşturabiliriz.
1 2 3 4
select
REGEXP_REPLACE(tel_nbr, '([[:digit:]]{3})([[:digit:]]{3})([[:digit:]]{2})([[:digit:]]{2})',
'(1) 2 3 4') as res
from (
select 5548366432 as tel_nbr from dual
) t
Result : (554) 836 64 32
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Oracle Regular Expression Fonksiyonları
REGEXP_REPLACE
REGEXP_REPLACE(source_string, regexp_pattern, replacement, [position], [occurrence], [modes])
Res_2 kolonunda REGEX_REPLACE fonksiyonu kullanmadan aynı sonucu nasıl elde
edebileceğimizi görebiliriz.
select
REGEXP_REPLACE(tel_nbr, '([[:digit:]]{3})([[:digit:]]{3})([[:digit:]]{2})([[:digit:]]{2})',
'(1) 2 3 4') as res,
'(' || SUBSTR(tel_nbr , 1, 3 )||')'|| ' ' | |SUBSTR(tel_nbr , 4, 3 ) || ' ' ||SUBSTR(tel_nbr
, 7, 2 ) || ' ' || SUBSTR(tel_nbr , 9, 2 ) as res_2
from (
select 5548366432 as tel_nbr from dual
) t
Result : (554) 836 64 32
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Oracle Regular Expression Fonksiyonları
REGEXP_INSTR
REGEXP_INSTR(source_string, regexp_pattern, [position], [occurrence], [return_option], [modes])
REGEXP_INSTR fonksiyonu da yine bir Oracle fonksiyonu olan INSTR fonksiyonunu
genişleten bir fonksiyondur diyebiliriz. Fonksiyon verilen pattern ve return option
parametrelerini değerlendirerek eşleşen dizinin başlangıç ya da bitiş konum indexini
döndürür. Herhangi bir eşleşme bulunamazsa 0 değeri döner.
Örneğin, aradığımız veri setinde ilk sayının görüldüğü indexi tespit etmeye çalışalım.
SELECT
REGEXP_INSTR('Volkan Çamaş Regexp 25062017', '[[:digit:]]', 1, 1) as RES
FROM DUAL
Result : 21
Bunu regex fonksiyonu kullanmadan yaptığımızı düşünürsek , tek tek tüm rakamların
pozisyonunu tespit edip sonra bunlar arasında minimum değeri hangisi ise bunu
seçen bir sorgu yazmalıydık! 
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Oracle Regular Expression Fonksiyonları
REGEXP_INSTR kullanmadan aynı değeri bulmak için böyle bir sorgu oluşturmalıydık.
Result :21
SELECT MIN(NULLIF(IND_VALUE , 0 ) ) as MIN_IND
FROM (
SELECT '0' as DIGIT, INSTR('Volkan Çamaş Regexp 25062017' , 0 ) as IND_VALUE FROM DUAL
UNION ALL
SELECT '1' as DIGIT, INSTR('Volkan Çamaş Regexp 25062017', 1 ) as IND_VALUE FROM DUAL
UNION ALL
SELECT '2' as DIGIT, INSTR('Volkan Çamaş Regexp 25062017' , 2 ) as IND_VALUE FROM DUAL
UNION ALL
SELECT '3' as DIGIT, INSTR('Volkan Çamaş Regexp 25062017' , 3 ) as IND_VALUE FROM DUAL
UNION ALL
SELECT '4' as DIGIT, INSTR('Volkan Çamaş Regexp 25062017' , 4 ) as IND_VALUE FROM DUAL
UNION ALL
SELECT '5' as DIGIT, INSTR('Volkan Çamaş Regexp 25062017' , 5 ) as IND_VALUE FROM DUAL
UNION ALL
SELECT '6' as DIGIT, INSTR('Volkan Çamaş Regexp 25062017' , 6 ) as IND_VALUE FROM DUAL
UNION ALL
SELECT '7' as DIGIT, INSTR('Volkan Çamaş Regexp 25062017' , 7 ) as IND_VALUE FROM DUAL
UNION ALL
SELECT '8' as DIGIT, INSTR('Volkan Çamaş Regexp 25062017' , 8 ) as IND_VALUE FROM DUAL
UNION ALL
SELECT '9' as DIGIT, INSTR('Volkan Çamaş Regexp 25062017' , 9 ) as IND_VALUE FROM DUAL
) t
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Oracle Regular Expression Fonksiyonları
REGEXP_SUBSTR
REGEXP_SUBSTR(source_string, regexp_pattern, [position], [occurrence], [modes])
Bir başka fonksiyon olan SUBSTR fonksiyonun genişletilmiş halidir diyebiliriz. SUBSTR
fonksiyonu verilen indexler aralığına denk gelen veriyi döndürürken REGEXP_SUBSTR
verilen pattern doğrultusunda konumu farketmeksizin eşleşen değeri döndürür.
SELECT
REGEXP_SUBSTR('Oracle Regular Expression Demo','[[:alpha:]]+',1,1) FROM dual
Result :
Oracle
Patterni incelediğimizde alpha karakter sınıfı
yani sadece harfler ve ‘+’ belirtilerek ilk
eşleşmenin yakalanması sağlanmıştır.
Boşluk bir harf olarak değerlendirilmediği için
sonuç Oracle dönecektir.
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Oracle Regular Expression Fonksiyonları
REGEXP_COUNT
REGEXP_COUNT( source_string, regexp_pattern , [start_position] , [modes] )
Belirttiğimiz patterne uygun kaç adet eşleşme olduğu bilgisini dönen bir fonksiyondur.
Eğer eşleşme bulunamadıysa 0 değerini döndürür.
Örnek olarak ilgili veri setinde kaç adet rakam olduğunu bulalım.
SELECT
REGEXP_COUNT('01072017 tarihinde 008GHXJ78 nolu
referans nolu biletiniz başarıyla satın alındı', '[[:digit:]]', 1) as RES
FROM DUAL
Result:
13
Patterni incelediğimizde digit karakter sınıfı yani
sadece rakamlar ile bir eşleşme olması gerektiği
belirtilmiştir.
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Örnekler
Örnekler ile birlikte farklı RegEx patternleri nasıl oluşturabiliriz , hangi ihtiyaçlarımızda
RegEx problemimize çözüm bulacaktır inceleyelim.
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Örnekler -1
Bir EFT hareket tablosundaki IBAN’ı aramak istediğimizde IBAN = ‘TR64….’ gibi
filtreleyerek bulabiliriz.
Ancak EFT tablosunda IBAN bilgisini bir IBAN kolonunda değil de açıklama sütunun
içinde herhangi bir yerde tutulduğunu varsayarsak bunu RegEx ile nasıl bulabiliriz
inceleyelim.
Örnek Veri :
‘Volkan Çamaş
Lösev Bağış
İstanbul Merkez Şube TR-1100/451234645
TR640546450000011226027878’
Yukarıda örneğimize uygun bir veri oluşturalım. Aradığımız verinin aslında desenini
(pattern) biliyoruz. 2 adet harf ve 24 adet rakamdan oluşan bir bilgiyi arıyoruz.
Burada yardımımıza regular expression koşuyor ve normal fonksiyonlarla bir hayli
uğraşacağımız bir sorguyu birkaç dakikada oluşturabiliyoruz.
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Örnekler -1
Yukarıda önce dual ile örnek verimizi oluşturduk. Sonrasında REGEXP_SUBSTR
fonksiyonu kullanarak verinin içerisinde geçen IBAN bilgisini döndüren bir sorgu
oluşturduk.
Patternimiz ise şöyle ;
[A-Z]{2}  İlk 2 karakteri A’dan Z’ye kadar bir harf olmalı
[0-9]{24}  Sonrasında da 24 adet rakamdan oluşan bir dizi olmalı
SELECT
regexp_substr(trim(test_data) , '[A-Z]{2}[0-9]{24}' ) as IBAN
FROM
(
select
'Volkan Çamaş
Lösev Bağış
İstanbul Merkez Şube TR-1100/451234545
TR640546450000011226027878
' as test_data FROM
dual
)a
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Örnekler -2
Bu örneğimizde içerisinde bir çok veri deseni barındıran bir kolon içerisinden gerekli
olan bilgileri anlamlı kolonlara dönüştürmeyi inceleyeceğiz.
Kolon içerisindeki veri
'26487987451 ; volkan.camas@caligo.com.tr ; 34CLG034 ; 4503458745121245
;TR640546450000011226027878'
Örneğimiz içerisinde sırasıyla bir TCKN (11 haneli sayı) , e-posta adresi , plaka , web
sitesi , kredi kartı numarası ve IBAN patterni (2 harf-24 rakam) bulunduğunu biliyoruz.
Bu örnek için klasik yöntemle yapmaya çalışırsak ‘;’ karakteri ile d parçalama işlemini
yapabiliriz. Ama bu yöntemle validasyon yapmadan içerisinde hangi bilgi olursa olsun
gelecektir.
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Örnekler -2
Farklı veri desenlerine uygun patternleri oluşturduk. Böylece bu patterne uymayan
bir bilgi gelmesi durumunda boş gelecektir. Örneğin 9 haneli bir TCKN bilgisi girildi
ise patterne uymadığı için boş dönecektir.
select
regexp_substr(test_data , '[0-9]{11}' ) as tckn,
regexp_substr(test_data , '[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}') as email,
regexp_substr(test_data ,
'[[:alpha:][:digit:][:punct:]]+@[[:alpha:][:digit:][:punct:]]+.[[:alpha:]]{2,4}' ) as email2,
regexp_substr(test_data , '[0-9]{2}[[:alpha:]]{2,3}[0-9]{2,4}' ) as plaka,
regexp_substr(test_data , '[[:digit:]]{16} ') as kredi_kart_no,
regexp_substr(test_data , '[A-Z]{2}[0-9]{24}' ) as IBAN
from (
select
'26487987451 ; volkan.camas@caligo.com.tr ; 34CLG034 ; 4503458745121245
;TR640546450000011226027878' as test_data
from dual
) t
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Örnekler -3
Veri ambarı uygulamaları için veri kalitesi kuralları uygularken de RegEx kullanabiliriz.
Ayrıca bu RegEx kurallarını constraint olarak kolonlara tanımlayabilirsiniz.
Örneğin ;
Müşteri adı içerisinde harf içermeyen kaç adet kayıt var ? (Boşluk içerebilir)
SELECT COUNT(*) FROM (
SELECT 'Volkan Çamaş' AS CUSTOMER_NAME FROM DUAL
UNION ALL
SELECT 'Mr. Smith' AS CUSTOMER_NAME FROM DUAL
UNION ALL
SELECT 'Ali Yılmaz' AS CUSTOMER_NAME FROM DUAL
UNION ALL
SELECT 'Ayşe-Mehmet Yıldırım' AS CUSTOMER_NAME FROM DUAL
)
WHERE
(CASE WHEN REGEXP_LIKE(CUSTOMER_NAME , '[[:digit:][:punct:][:cntrl:]]') THEN 1 ELSE 0 END ) = 1
Result:
2
(‘.’ Ve ‘-’ içeren kayıtların sayısı)
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
E-mail : volkan.camas@caligo.com.tr
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Referanslar
1- http://docs.oracle.com/cd/B28359_01/appdev.111/b28424/adfns_regexp.htm#i1007670
2- http://psoug.org/reference/regexp.html
SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK
COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY
Teşekkürler

Mais conteúdo relacionado

Semelhante a Regular Expression on Oracle

progressokulu.com Advanced Business Language Slide 4
progressokulu.com Advanced Business Language Slide 4progressokulu.com Advanced Business Language Slide 4
progressokulu.com Advanced Business Language Slide 4kaan verdioglu
 
Ileri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer KoculuIleri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer Koculumustafa sarac
 
İleri Seviye T-SQL Programlama - Chapter 09
İleri Seviye T-SQL Programlama - Chapter 09İleri Seviye T-SQL Programlama - Chapter 09
İleri Seviye T-SQL Programlama - Chapter 09Cihan Özhan
 
Programlama Temelleri Hazır Metodlar
Programlama Temelleri Hazır MetodlarProgramlama Temelleri Hazır Metodlar
Programlama Temelleri Hazır Metodlarkadirolmez
 
İleri Seviye T-SQL Programlama - Chapter 03
İleri Seviye T-SQL Programlama - Chapter 03İleri Seviye T-SQL Programlama - Chapter 03
İleri Seviye T-SQL Programlama - Chapter 03Cihan Özhan
 
Feature selection - metin madenciliği özellik seçimi
Feature selection - metin madenciliği özellik seçimiFeature selection - metin madenciliği özellik seçimi
Feature selection - metin madenciliği özellik seçimiŞahabettin Akca
 
Stored procedure
Stored procedureStored procedure
Stored procedureoktaygokgol
 

Semelhante a Regular Expression on Oracle (12)

progressokulu.com Advanced Business Language Slide 4
progressokulu.com Advanced Business Language Slide 4progressokulu.com Advanced Business Language Slide 4
progressokulu.com Advanced Business Language Slide 4
 
Ileri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer KoculuIleri seviye javascript by Azer Koculu
Ileri seviye javascript by Azer Koculu
 
İleri Seviye T-SQL Programlama - Chapter 09
İleri Seviye T-SQL Programlama - Chapter 09İleri Seviye T-SQL Programlama - Chapter 09
İleri Seviye T-SQL Programlama - Chapter 09
 
Matlab Seminer2005
Matlab Seminer2005Matlab Seminer2005
Matlab Seminer2005
 
MS Excel 2013
MS Excel 2013MS Excel 2013
MS Excel 2013
 
Programlama Temelleri Hazır Metodlar
Programlama Temelleri Hazır MetodlarProgramlama Temelleri Hazır Metodlar
Programlama Temelleri Hazır Metodlar
 
Sqlkomutları
SqlkomutlarıSqlkomutları
Sqlkomutları
 
İleri Seviye T-SQL Programlama - Chapter 03
İleri Seviye T-SQL Programlama - Chapter 03İleri Seviye T-SQL Programlama - Chapter 03
İleri Seviye T-SQL Programlama - Chapter 03
 
Java script
Java scriptJava script
Java script
 
Feature selection - metin madenciliği özellik seçimi
Feature selection - metin madenciliği özellik seçimiFeature selection - metin madenciliği özellik seçimi
Feature selection - metin madenciliği özellik seçimi
 
Stored procedure
Stored procedureStored procedure
Stored procedure
 
Templates
Templates Templates
Templates
 

Regular Expression on Oracle

  • 1. Oracle Regular Expression Volkan ÇAMAŞ Senior BI Consultant
  • 2. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY GÜNDEM  RegEx Nedir ?  RegEx Kullanım Alanları  Pattern Nedir ?  Oracle RegEx Fonksiyonları  Metacharacters  Match Parameters  Oracle RegEx Fonksiyon Örnekleri
  • 3. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Regular Expression Nedir ?  String içerisinde belli bir kelime ya da daha karmaşık olan belli bir dizilime sahip bir bilgiyi bulmak için kullanılan bir metoddur. Arama işleminde belli bir kural dahilinde uzunluk ve tip belirtip buna uygun verileri tespit etmemizi sağlamaktadır.  Örneğin , web sitelerinde şifre tanımlamalarında en az bir noktalama işareti olmalıdır diye bir uyarı verilir. Bu doğrulamayı kolaylıkla RegEx ile yapabiliriz.  Günümüzde yazılım dillerinin başlıcaları (Phyton ,C#, Java , SQL, Javascript vb.) regular expression kütüphaneleri ile bu yöntemi sağlamaktadır. Bu yazıda Oracle Db üzerinde regular expression fonksiyonları nelerdir, bu fonksiyonlar ile hangi problemlere çözüm bulabiliriz örnekler ile inceleyeceğiz.
  • 4. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Regular Expression Kullanım Alanları  Regular expression kullanımı genelde kompleks bir aramaya ihtiyaç duyulduğunda başvurulan bir metoddur.  Genel olarak kullanım alanı database’den çok application ya da client(Java , C#, Javascript vb.) tarafında diyebiliriz.  Email , password validasyonu  Kredi kartı , IBAN validasyonu  Telefon , posta kodu  Kompleks arama ( HTML kodu içerisinde sadece img tag’i arama)
  • 5. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Pattern nedir ?  Pattern, yazılım ile ilgili bir çok konu alanında farklı anlamlar ifade edebilmektedir. Regular expression konu alanı için ise pattern aranılan verinin deseni veya şablonu diyebiliriz. Kimlik numarasının 11 haneli , kredi kartının 16 haneli ya da e-posta adreslerinin @ işareti içermesi bu tip verilerin desenidir(pattern) diyebiliriz.  RegEx patterni oluşturmak için ise bazı bileşenler gerekmektedir.  Metacharacters  Character class <?! pattern @%>
  • 6. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Oracle Regular Expression Fonksiyonları SQL Fonksiyonu Açıklama REGEXP_LIKE Belirtilen pattern doğrultusunda karakter seti içerisinde arama yapmak için kullanılır. WHERE koşulunda kullanıldığında eşleşen kayıtlar seçilebilir. REGEXP_REPLACE Karakter dizisinde belirtilen patterndeki eşleşen değerleri arar ve değiştirilmesi istenen değer ile günceller. REGEXP_INSTR Verilen regular expression patternin hangi indexten itibaren başladığını belirtir. REGEXP_SUBSTR Regular expression patterni ile eşleşen ilk değeri döndürür. REGEXP_COUNT Regular expression patterni ile eşleşen kaç adet veri seti olduğu sonucunu döndürür.  Oracle’ın sunduğu regular expression fonksiyonları nelerdir aşağıdaki tabloda açıklamaları ile birlikte yer almaktadır. Bu fonksiyonlar yardımıyla ihtiyaç duyduğumuz sonuca uygun bir sorgu oluşturabiliriz.
  • 7. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Metacharacters Sembol Açıklama * Sıfır veya daha fazla karakter anlamına gelir | Alternatif eşleşmeleri belirtmek için kullanılan eşleşme operatörü (OR operatörü diyebiliriz.) ^/$ İle başlar / İle biter ifadesi için kullanılır [ ] Listede verilen ifadelerin herhangi biri ile eşleşen eşleşme listesi köşeli parantez arasında belirtilir {m} m defa eşleşme olacağını belirtir {m , n} En az m kere fakat en fazla n kere eşleşme [: : ] Bir karakter sınıfını (character class) belirtir ve bu sınıfta herhangi bir karakterle eşleşme Kendinden sonraki özel karakterin stringe dahil edilmesini sağlar + Bir ya da daha çok tekrarı eşler ? Sıfır yada bir tekrarı eşler . Desteklenen karakter setinde NULL hariç herhangi bir karakteri eşler ( ) Tek bir alt-ifade olarak kullanılan gruplama ifadesi [==] Eşitlik sınıflarını belirtir n Geri-referans ifadesi [..] Çok karakterli bir eleman olarak bir harmanlama elemanı belirtir  Metacharacters regular expression için pattern oluşturmada kullanacağımız formatlardır. Tek ya da çoklu olarak kullanılabilmektedir.
  • 8. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Match parameter – Modes (Eşleştirme parametreleri) Eşleştirme parametreleri tüm regular expression fonksiyonları için input değişkeni olarak verilebilmektedir. Aşağıda belirtilen değerler verilerek eşleştirme modları ihtiyacımıza göre şekillendirilebilmektedir. * Eğer birbiri ile zıt bir match parameter değeri verilirse Oracle son tanımlanan değeri alır. Örneğin ‘ic’ şeklinde tanımlanırsa , oracle case-sensitive özelliği açık olarak bir arama işlemi gerçekleştirir. Oracle’da tanımlı değerler dışında bir değer verilirse hata almaktadır. Sembol Açıklama i Küçük büyük harf duyarlılığı kapalı olarak arama yapılır. (case insensitive) c Küçük büyük harf duyarlılığı açık olarak arama yapılır. (case sensitive) n Herhangi bir karakterle eşleşecek ve aynı şekilde yeni satır karakteriyle eşleşecektir m Multiline içeren string içerisinde arama yapılabilir. Default halinde string tek satır olarak baz alınmaktadır. x Aranılan pattern içerisinde boşluk karakterine izin verir
  • 9. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Character Class (Karakter sınıfı) Karakter sınıfları bir grup ya da aralığı ifade eden karakter kümelerini barındırır. Pattern tanımlamalarında ihtiyaç duyulan bir syntaxdir. Aşağıda sembol ve açıklamalarına yer verilmiştir. Sembol Açıklama [:upper:] Büyük harfler [A-Z)] [:lower:] Küçük harfler [a-z] [:alpha:] Tüm harfler [A-Za-z] [:alnum:] Rakam ve harfler [0-9A-Za-z] [:digit:] Rakamlar [0-9] [:xdigit:] Hexadecimal digits { 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,a,b,c, ,d,e } [:punct:] Noktalama işaretleri ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ ] ^ _ ` { | } ~ [:blank:] Boşuk ve tab [:space:] Boşluk karakteri [:cntrl:] Kontrol karakterleri ASCII 000-037 aralığı ve 177(DEL) [:graph:] [:alnum:] ve [:punct:] [:print:] [:alnum:] , [:punct:] ve boşluk [:word:] Rakamlar , harfler ve underscore
  • 10. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Oracle Regular Expression Fonksiyonları REGEXP_LIKE REGEXP_LIKE(source_string, regexp_pattern , [modes] ) REGEXP_LIKE fonksiyonu, yalnızca verilen patterne uygun bir sonuç olup olmadığını belirten boolean (true ya da false) bir sonuç döndürmesi sebebiyle diğer REGEX fonksiyonlarına göre farklıdır. Eşleşmenin nerede ve nasıl sağlandığına dair bir sonuç döndürmez. Örnek olarak bir tablonun içinde ‘uç’ ile başlayan bazı kelimeler aradığımızı varsayalım. (Uçak , Uçurtma ,Uçmak, Uçurum) SELECT c1 FROM t1 WHERE REGEXP_LIKE(c1, 'uç(urum)|(ak)|(mak)|(urtma)' , 'i') *[] içinde yazılan input parametreleri zorunlu parametreler değildir. ‘i’ modes parametresi ile incasesensitive arama yapılmaktadır. Parantez içinde ‘uç’ kelimesinden sonra alabileceği değerler belirtilmeli ve ‘|’ karakteri ile veya olduğunu belirten komut yazılmalıdır. Parantez içinde ‘uç’ kelimesinden sonra alabileceği değerler belirtilmeli ve ‘|’ karakteri ile veya olduğunu belirten komut yazılmalıdır.
  • 11. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Oracle Regular Expression Fonksiyonları REGEXP_REPLACE REGEXP_REPLACE(source_string, regexp_pattern, replacement, [position], [occurrence], [modes]) REGEXP_REPLACE fonksiyonu da yine bir Oracle fonksiyonu olan REPLACE fonksiyonuna benzer şekilde, belirtilen pattern ile eşleşme yakalandığında input olarak verilen replacement parametresi ile güncellenir. Kullanım alanlarına veri formatlama, veri temizleme vb. örnekler verebiliriz. Örneğin , telefon numarası veritabanında number olarak 5548366432 olarak tutulduğunu varsayalım. Telefon numarasını (554) 836 64 32 olarak formatlamaya ihtiyaç duyduğumuzda bu fonksiyon yardımıyla kolaylıkla oluşturabiliriz. 1 2 3 4 select REGEXP_REPLACE(tel_nbr, '([[:digit:]]{3})([[:digit:]]{3})([[:digit:]]{2})([[:digit:]]{2})', '(1) 2 3 4') as res from ( select 5548366432 as tel_nbr from dual ) t Result : (554) 836 64 32
  • 12. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Oracle Regular Expression Fonksiyonları REGEXP_REPLACE REGEXP_REPLACE(source_string, regexp_pattern, replacement, [position], [occurrence], [modes]) Res_2 kolonunda REGEX_REPLACE fonksiyonu kullanmadan aynı sonucu nasıl elde edebileceğimizi görebiliriz. select REGEXP_REPLACE(tel_nbr, '([[:digit:]]{3})([[:digit:]]{3})([[:digit:]]{2})([[:digit:]]{2})', '(1) 2 3 4') as res, '(' || SUBSTR(tel_nbr , 1, 3 )||')'|| ' ' | |SUBSTR(tel_nbr , 4, 3 ) || ' ' ||SUBSTR(tel_nbr , 7, 2 ) || ' ' || SUBSTR(tel_nbr , 9, 2 ) as res_2 from ( select 5548366432 as tel_nbr from dual ) t Result : (554) 836 64 32
  • 13. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Oracle Regular Expression Fonksiyonları REGEXP_INSTR REGEXP_INSTR(source_string, regexp_pattern, [position], [occurrence], [return_option], [modes]) REGEXP_INSTR fonksiyonu da yine bir Oracle fonksiyonu olan INSTR fonksiyonunu genişleten bir fonksiyondur diyebiliriz. Fonksiyon verilen pattern ve return option parametrelerini değerlendirerek eşleşen dizinin başlangıç ya da bitiş konum indexini döndürür. Herhangi bir eşleşme bulunamazsa 0 değeri döner. Örneğin, aradığımız veri setinde ilk sayının görüldüğü indexi tespit etmeye çalışalım. SELECT REGEXP_INSTR('Volkan Çamaş Regexp 25062017', '[[:digit:]]', 1, 1) as RES FROM DUAL Result : 21 Bunu regex fonksiyonu kullanmadan yaptığımızı düşünürsek , tek tek tüm rakamların pozisyonunu tespit edip sonra bunlar arasında minimum değeri hangisi ise bunu seçen bir sorgu yazmalıydık! 
  • 14. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Oracle Regular Expression Fonksiyonları REGEXP_INSTR kullanmadan aynı değeri bulmak için böyle bir sorgu oluşturmalıydık. Result :21 SELECT MIN(NULLIF(IND_VALUE , 0 ) ) as MIN_IND FROM ( SELECT '0' as DIGIT, INSTR('Volkan Çamaş Regexp 25062017' , 0 ) as IND_VALUE FROM DUAL UNION ALL SELECT '1' as DIGIT, INSTR('Volkan Çamaş Regexp 25062017', 1 ) as IND_VALUE FROM DUAL UNION ALL SELECT '2' as DIGIT, INSTR('Volkan Çamaş Regexp 25062017' , 2 ) as IND_VALUE FROM DUAL UNION ALL SELECT '3' as DIGIT, INSTR('Volkan Çamaş Regexp 25062017' , 3 ) as IND_VALUE FROM DUAL UNION ALL SELECT '4' as DIGIT, INSTR('Volkan Çamaş Regexp 25062017' , 4 ) as IND_VALUE FROM DUAL UNION ALL SELECT '5' as DIGIT, INSTR('Volkan Çamaş Regexp 25062017' , 5 ) as IND_VALUE FROM DUAL UNION ALL SELECT '6' as DIGIT, INSTR('Volkan Çamaş Regexp 25062017' , 6 ) as IND_VALUE FROM DUAL UNION ALL SELECT '7' as DIGIT, INSTR('Volkan Çamaş Regexp 25062017' , 7 ) as IND_VALUE FROM DUAL UNION ALL SELECT '8' as DIGIT, INSTR('Volkan Çamaş Regexp 25062017' , 8 ) as IND_VALUE FROM DUAL UNION ALL SELECT '9' as DIGIT, INSTR('Volkan Çamaş Regexp 25062017' , 9 ) as IND_VALUE FROM DUAL ) t
  • 15. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Oracle Regular Expression Fonksiyonları REGEXP_SUBSTR REGEXP_SUBSTR(source_string, regexp_pattern, [position], [occurrence], [modes]) Bir başka fonksiyon olan SUBSTR fonksiyonun genişletilmiş halidir diyebiliriz. SUBSTR fonksiyonu verilen indexler aralığına denk gelen veriyi döndürürken REGEXP_SUBSTR verilen pattern doğrultusunda konumu farketmeksizin eşleşen değeri döndürür. SELECT REGEXP_SUBSTR('Oracle Regular Expression Demo','[[:alpha:]]+',1,1) FROM dual Result : Oracle Patterni incelediğimizde alpha karakter sınıfı yani sadece harfler ve ‘+’ belirtilerek ilk eşleşmenin yakalanması sağlanmıştır. Boşluk bir harf olarak değerlendirilmediği için sonuç Oracle dönecektir.
  • 16. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Oracle Regular Expression Fonksiyonları REGEXP_COUNT REGEXP_COUNT( source_string, regexp_pattern , [start_position] , [modes] ) Belirttiğimiz patterne uygun kaç adet eşleşme olduğu bilgisini dönen bir fonksiyondur. Eğer eşleşme bulunamadıysa 0 değerini döndürür. Örnek olarak ilgili veri setinde kaç adet rakam olduğunu bulalım. SELECT REGEXP_COUNT('01072017 tarihinde 008GHXJ78 nolu referans nolu biletiniz başarıyla satın alındı', '[[:digit:]]', 1) as RES FROM DUAL Result: 13 Patterni incelediğimizde digit karakter sınıfı yani sadece rakamlar ile bir eşleşme olması gerektiği belirtilmiştir.
  • 17. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Örnekler Örnekler ile birlikte farklı RegEx patternleri nasıl oluşturabiliriz , hangi ihtiyaçlarımızda RegEx problemimize çözüm bulacaktır inceleyelim.
  • 18. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Örnekler -1 Bir EFT hareket tablosundaki IBAN’ı aramak istediğimizde IBAN = ‘TR64….’ gibi filtreleyerek bulabiliriz. Ancak EFT tablosunda IBAN bilgisini bir IBAN kolonunda değil de açıklama sütunun içinde herhangi bir yerde tutulduğunu varsayarsak bunu RegEx ile nasıl bulabiliriz inceleyelim. Örnek Veri : ‘Volkan Çamaş Lösev Bağış İstanbul Merkez Şube TR-1100/451234645 TR640546450000011226027878’ Yukarıda örneğimize uygun bir veri oluşturalım. Aradığımız verinin aslında desenini (pattern) biliyoruz. 2 adet harf ve 24 adet rakamdan oluşan bir bilgiyi arıyoruz. Burada yardımımıza regular expression koşuyor ve normal fonksiyonlarla bir hayli uğraşacağımız bir sorguyu birkaç dakikada oluşturabiliyoruz.
  • 19. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Örnekler -1 Yukarıda önce dual ile örnek verimizi oluşturduk. Sonrasında REGEXP_SUBSTR fonksiyonu kullanarak verinin içerisinde geçen IBAN bilgisini döndüren bir sorgu oluşturduk. Patternimiz ise şöyle ; [A-Z]{2}  İlk 2 karakteri A’dan Z’ye kadar bir harf olmalı [0-9]{24}  Sonrasında da 24 adet rakamdan oluşan bir dizi olmalı SELECT regexp_substr(trim(test_data) , '[A-Z]{2}[0-9]{24}' ) as IBAN FROM ( select 'Volkan Çamaş Lösev Bağış İstanbul Merkez Şube TR-1100/451234545 TR640546450000011226027878 ' as test_data FROM dual )a
  • 20. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Örnekler -2 Bu örneğimizde içerisinde bir çok veri deseni barındıran bir kolon içerisinden gerekli olan bilgileri anlamlı kolonlara dönüştürmeyi inceleyeceğiz. Kolon içerisindeki veri '26487987451 ; volkan.camas@caligo.com.tr ; 34CLG034 ; 4503458745121245 ;TR640546450000011226027878' Örneğimiz içerisinde sırasıyla bir TCKN (11 haneli sayı) , e-posta adresi , plaka , web sitesi , kredi kartı numarası ve IBAN patterni (2 harf-24 rakam) bulunduğunu biliyoruz. Bu örnek için klasik yöntemle yapmaya çalışırsak ‘;’ karakteri ile d parçalama işlemini yapabiliriz. Ama bu yöntemle validasyon yapmadan içerisinde hangi bilgi olursa olsun gelecektir.
  • 21. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Örnekler -2 Farklı veri desenlerine uygun patternleri oluşturduk. Böylece bu patterne uymayan bir bilgi gelmesi durumunda boş gelecektir. Örneğin 9 haneli bir TCKN bilgisi girildi ise patterne uymadığı için boş dönecektir. select regexp_substr(test_data , '[0-9]{11}' ) as tckn, regexp_substr(test_data , '[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}') as email, regexp_substr(test_data , '[[:alpha:][:digit:][:punct:]]+@[[:alpha:][:digit:][:punct:]]+.[[:alpha:]]{2,4}' ) as email2, regexp_substr(test_data , '[0-9]{2}[[:alpha:]]{2,3}[0-9]{2,4}' ) as plaka, regexp_substr(test_data , '[[:digit:]]{16} ') as kredi_kart_no, regexp_substr(test_data , '[A-Z]{2}[0-9]{24}' ) as IBAN from ( select '26487987451 ; volkan.camas@caligo.com.tr ; 34CLG034 ; 4503458745121245 ;TR640546450000011226027878' as test_data from dual ) t
  • 22. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Örnekler -3 Veri ambarı uygulamaları için veri kalitesi kuralları uygularken de RegEx kullanabiliriz. Ayrıca bu RegEx kurallarını constraint olarak kolonlara tanımlayabilirsiniz. Örneğin ; Müşteri adı içerisinde harf içermeyen kaç adet kayıt var ? (Boşluk içerebilir) SELECT COUNT(*) FROM ( SELECT 'Volkan Çamaş' AS CUSTOMER_NAME FROM DUAL UNION ALL SELECT 'Mr. Smith' AS CUSTOMER_NAME FROM DUAL UNION ALL SELECT 'Ali Yılmaz' AS CUSTOMER_NAME FROM DUAL UNION ALL SELECT 'Ayşe-Mehmet Yıldırım' AS CUSTOMER_NAME FROM DUAL ) WHERE (CASE WHEN REGEXP_LIKE(CUSTOMER_NAME , '[[:digit:][:punct:][:cntrl:]]') THEN 1 ELSE 0 END ) = 1 Result: 2 (‘.’ Ve ‘-’ içeren kayıtların sayısı)
  • 23. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY E-mail : volkan.camas@caligo.com.tr
  • 24. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Referanslar 1- http://docs.oracle.com/cd/B28359_01/appdev.111/b28424/adfns_regexp.htm#i1007670 2- http://psoug.org/reference/regexp.html
  • 25. SLAYT BAŞLIĞI BU BÖLÜME EKLENECEK COPYRIGHT @ 2017 CALIGO DATA MANAGEMENT CONSULTANCY Teşekkürler