Sql fonksiyonlar ile e-mail doğrulama

Çoğu veritabanı yönetim sistemi fonksiyon kullanma olanağını sunar. Fonksiyonların saklı yordamlardan farkı bir toplu işlem ihtiva etmemeleridir. Onların ana maksadı başka yerlerde kullanılmak üzere değer döndürmektir. Aşağıdaki örnekte Ms Sql 2000’de formata uygun girilmemiş, veri girişi sırasında format kontrolü yapılmamış email adreslerini tespit etmeye yönelik kullanıcı tanımlı sql fonksiyonunun kullanımı esas alınmıştır.

Email adresi doğrulamalarında regular expression denilen ifadeler kullanılır. Regular expression demek e-mail adresinin maketi ya da formatı demektir. Sql 2000 regular expression desteği vermediğinden vbscript desteğinden faydalanacağız.

Regular expression kontrolü ile ilgili ana fonksiyonumuz:

CREATE FUNCTION dbo.find_regular_expression
(
@source varchar(5000),
@regexp varchar(1000),
@ignorecase bit = 0
)
RETURNS bit
AS
BEGIN
DECLARE @hr integer
DECLARE @objRegExp integer
DECLARE @objMatches integer
DECLARE @objMatch integer
DECLARE @count integer
DECLARE @results bit
EXEC @hr = sp_OACreate ‘VBScript.RegExp’, @objRegExp OUTPUT
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OASetProperty @objRegExp, ‘Pattern’, @regexp
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OASetProperty @objRegExp, ‘Global’, false
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OASetProperty @objRegExp, ‘IgnoreCase’, @ignorecase
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OAMethod @objRegExp, ‘Test’, @results OUTPUT, @source
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OADestroy @objRegExp
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
RETURN @results
END

Bu fonksiyon kontrolde kullanacağımız regular expression’ı, regular expression uyumunun arandığı metni girdi olarak kabul etmekte ve metin regular expression yapısında ise 1 döndürmektedir.

CREATE FUNCTION dbo.udf_ValidEmail  –email format uyumunu kontrol eden fonksiyon
(
— Add the parameters for the function here
@email nvarchar(50) –50 karakter uzunluğunda email kontrol edilebilir
)
returns bit
AS
BEGIN
declare @validEmail bit
— Declare the return variable here
DECLARE @regularexpression nvarchar(250);
set @regularexpression = ‘^(([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+([;.](([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+)*$’

— Add the T-SQL statements to compute the return value here
set @validEmail = dbo.find_regular_expression(@email,@regularexpression,0)

— Return the result of the function
return @validEmail

END
GO

select dbo.udf_ValidEmail(‘ahmet@yahoog.com.tr’)

Sql’in kullanıcıya sağladığı fonksiyon tanımlama olanağı sayesinde sistem fonksiyonlarda yer almayan ve sık kullandığımız fonksiyonları yazma olanağına sahibiz.

Mesela;

  • Girilen metni belirtilen karaktere göre split eden fonksiyon yazılabilir.
  • Sorgu sonucundaki parasal değeri Türk formatında (x.xxx.xx tl) şeklinde formatlayarak gösterecek fonksiyon yazılabilir
  • Kg değerini 1000’e bölerek tona çevirecek fonksiyon yazılabilir.
  • vb, vb..

Kaynaklar:

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Doğrulama sorusu *