Creating User Defined Scalar Value Function

Posted at : Dec/22/2009
11243 Views

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.


ABOUT ME

Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Co-Founder & IT Trainer at Native Enterprise | Microsoft Azure Data Scientist | IBM RAG & Agentic AI | IBM Data Science & Data Analyst | Python Certified (PCEP, PCAP) | MOS, MTA, Xamarin Certified, ex MCT | ex MVP

CERTIFICATIONS

Microsoft Certified Associate
IBM RAG and Agentic AI Professional
IBM Data Science Professional IBM Data Analyst Professional
PCAP Associate Python Programmer Certified PCEP Entry Level Python Programmer Certified
Xamarin Certified
MOS 2007
MCPD MCTS
MCAD.NET

NATIVE ENTERPRISE

Native Enterprise - IT Training

FOLLOW ME

Youtube  Facebook  Instagram  LinkedIn   Twitter

RSS


NATIVE ENTERPRISE NEWS

© Copyright 2006 - 2026   Rully Yulian MF   All rights reserved.