Creating User Defined Scalar Value Function

T-SQL , Posted at : Dec/22/2009  
6715 Views   4 Comments

User defined function merupakan object database yang digunakan untuk membuat function yang didefinisikan oleh user. SQL Server sudah memiliki built-in function yang dapat langsung digunakan sesuai dengan kebutuhan aplikasi, contohnya seperti Len, ASCII, Cast dan lain-lain. Apabila built-in function yang tersedia tidak dapat memenuhi kebutuhan aplikasi maka kita harus membuat sendiri fungsi tersebut.

Terdapat beberapa jenis user defined function, yaitu : Scalar function, Table value function dan Aggregate function. Pada artikel ini saya akan membahas tentang user scalar function. Untuk jenis user function lain akan saya bahas di artikel berikutnya.

Scalar function merupakan fungsi yang mengembalikan sebuah nilai tunggal, misalnya penghitungan jumlah record dalam sebuah table, menghitung nilai rata-rata sebuah kumpulan nilai, dll.

Pada artikel ini saya akan membuat contoh bagaimana caranya melakukan enkripsi sederhana yang dibuat dengan menggunakan user defined scalar value function. Enkripsi sederhana yang digunakan hanyalah sebuah demo dengan menggunakan algoritma biasa pula, tentunya kita dapat menggunakan fitur enkripsi yang sudah disediakan oleh SQL Server itu sendiri. SQL Server yang saya gunakan yaitu SQL Server 2008.

Skenario yang digunakan untuk melakukan enkripsi sederhana ini yaitu dengan mengubah semua karakter dari sebuah teks input menjadi nilai ASCII dan ditambah dengan nilai 5 (tentunya anda dapat menambahkannya dengan nilai yang lain) setelah itu di konversi balik menjadi nilai CHAR sehingga nantinya setiap karakter yang terdapat didalam input teks tersebut bergeser sesuai dengan penambahan nilai yang digunakan.

Berikut langkah-langkahnya :

1. Ketikkan script berikut ini didalam sebuah database yang telah anda pilih dan eksekusi di SQL Server Management Studio :

CREATE Function [dbo].[SimpleEncrypting]
--input parameter :
(@text varchar(50))
 --nilai scalar yang dikembalikan :
Returns varchar(50) 

As
Begin

--hitung jumlah karakter yang terdapat di dalam input text
Declare @len int
Set @len = LEN(@text)

Declare @tempdata varchar(50)
Set @tempdata = ''

Declare @counter int = 1 

--looping semua karakter yang terdapat di dalam input text
While @counter <= @len
    Begin
        --fungsi ASCII akan mengembalikan nilai ASCII dari
        --sebuah karakter
        
        --fungsi CHAR akan mengembalikan nilai karakter
        --dari sebuah nilai ASCII
        
        --fungsi Substring digunakan untuk mengambil karakter
        --atau teks dengan jumlah tertentu dan dimulai dari
        --indeks tertentu (indeks dimulai dari 1)
    
        Set @tempdata = @tempdata + 
                CHAR(ASCII(Substring(@text,@counter,1)) + 5)
        
        Set @counter = @counter + 1
    End

--sebuah fungsi harus dikembalikan dengan perintah Return
--variabel @tempdata merupakan teks yang telah di enkripsi
Return @tempdata
End

2. Setelah sukses dieksekusi maka fungsi tersebut akan muncul di folder database yang anda gunakan, gambarnya dapat dilihat dibawah ini :

 

3.  Eksekusi fungsi tersebut dengan menjalankan perintah Select dan masukkan input berupa teks yang akan di enkripsi :

 

4. Dari gambar diatas dapat kita lihat hasil enkripsi sederhana dari teks ‘SQL Server 2008’ menjadi ‘XVQ%Xjw{jw%755=’.

Kemudian bagaimana caranya kita membuat fungsi untuk decrypt teks hasil enkripsi diatas? Jawabannya cukup mudah, yaitu kita tinggal membuat fungsi yang mirip dengan fungsi enkripsi diatas dengan mengubah algoritma enkripsi dengan mengurangi nilai ASCII nya dengan nilai –5 per karakter yang terdapat di dalam teks hasil enkripsi.

Berikut langkah-langkahnya :

1. Ketikkan script berikut ini didalam sebuah database yang telah anda pilih dan eksekusi di SQL Server Management Studio :

CREATE Function [dbo].[SimpleDecrypting]
--input parameter :
(@text varchar(50))
 --nilai scalar yang dikembalikan :
Returns varchar(50) 

As
Begin

--hitung jumlah karakter yang terdapat 
--di dalam input text
Declare @len int
Set @len = LEN(@text)

Declare @tempdata varchar(50)
Set @tempdata = ''

Declare @counter int = 1 

--looping semua karakter yang terdapat 
--di dalam input text
While @counter <= @len
    Begin
        --fungsi ASCII akan mengembalikan nilai ASCII dari
        --sebuah karakter
        
        --fungsi CHAR akan mengembalikan nilai karakter
        --dari sebuah nilai ASCII
        
        --fungsi Substring digunakan untuk mengambil karakter
        --atau teks dengan jumlah tertentu dan dimulai dari
        --indeks tertentu (indeks dimulai dari 1)
    
        Set @tempdata = @tempdata + 
                CHAR(ASCII(Substring(@text,@counter,1))-5)
        
        Set @counter = @counter + 1
    End

--sebuah fungsi harus dikembalikan dengan perintah Return
--variabel @tempdata merupakan teks yang telah di enkripsi
Return @tempdata
End

2. Setelah sukses dieksekusi maka fungsi tersebut akan muncul di folder database yang anda gunakan, gambarnya dapat dilihat dibawah ini :

 

3.  Eksekusi fungsi tersebut dengan menjalankan perintah Select dan masukkan input berupa teks yang akan di enkripsi :

 

Dari gambar diatas dapat kita lihat hasil dekkripsi dari teks ‘XVQ%Xjw{jw%755=’ diubah kembali menjadi ‘SQL Server 2008’. Pada artikel berikutnya saya akan membahas tentang User Defined Table-Value function.


[Comments]
eone  Jun/22/2011 04:03:02 :

 Nice artikel pak...
Tapi kok code encrypt sm decryptnya sama?

 

Rully  Jun/23/2011 12:37:21 :

eone > Betul..saya baru lihat, nanti saya perbaiki...thanks :)

arief  Oct/29/2011 12:36:06 :

sudah di perbaiki belum yah, perasaan masih sama 

Rully  Oct/29/2011 05:56:46 :

Maaf baru sekarang diperbaiki, terima kasih sudah diingatkan...silahkan dicoba lagi :)


[Write your comment]
Name (required)
Email (required-will not published)
 
Comment

VDHL
Input code above below (Case Sensitive) :
About Me 
Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Microsoft Certified Trainer | IT Trainer at Native Enterprise | IT Consultant | Software Developer | MCAD | MCPD | MOS | Bandung, West Java, Indonesia.
[Read More...]
Top Download 
Mapping Hak Akses User Pada MenuStrip Sampai Control Button : Downloaded 6083 times  
Bagaimana caranya menginstal database ketika deploying sebuah aplikasi? : Downloaded 4689 times  
Simple Voice Engine Application With Sound Player Class... : Downloaded 3554 times  
Change Group,Sort Order, Filtering By Date in Crystal Reports : Downloaded 3324 times  
WinForms DataGrid Paging With SqlDataAdapter : Downloaded 2706 times  
Links 
Certifications 
MOS 2007
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench
Native Enterprise 
Follow Me 
Facebook   LinkedIn   Twitter
Syndication 
Hosted By 
Native Enterprise News 
© Copyright 2006-2016   Rully Yulian MF   All rights reserved.