Anda di halaman 1dari 38

3.

STORED PROCEDURE DAN FUNCTION

Obyektif :
Setelah menyelesaikan bahasan ini, diharapkan melakukan hal berikut:
1. Memahami penggunaan serta perbedaan stored procedure dan function
2. Memahami jenis-jenis stored procedure dan function
3. Dapat membuat, mengubah, serta menghapus stored procedure dan function

3.1 Perbedaan Stored Procedure dan Function


Stored procedure merupakan objek pre-compile yang di-compile satu kali dan format
yang di-compile kemudian disimpan dan format tersebut akan mengeksekusi kode yang
di-compile setiap kali procedure tersebut dipanggil. Sedangkan function di-compile dan
dieksekusi setiap kali function tersebut dipanggil. Untuk lebih jelasnya, tabel berikut
akan menunjukkan perbandingan antara stored procedure dan function.

Tabel 3.1. Perbandingan Stored Procedure dan Function


No Function Stored Procedure
1 Harus mengembalikan nilai Tidak harus mengembalikan nilai
2 Hanya dapat memiliki parameter Dapat memiliki parameter input dan
input output
3 Tidak dapat memanggil procedure Dapat memanggil function
4 Hanya boleh terdapat statement Boleh terdapat statement select dan
SELECT statement DML lainnya
5 Tidak boleh terdapat blok try-catch
Boleh menggunakan blok try-catch untuk
penanganan error
6 Tidak boleh terdapat transaction Boleh menggunakan transaction
7 Dapat dipanggil dalam statement Tidak dapat dipanggil dalam statement
SELECT SELECT/WHERE/HAVING, hanya
dapat digunakan dengan statement
EXECUTE/EXEC
8 Dapat digunakan dalam statement Tidak dapat digunakan dalam klausa
JOIN sebagai result set JOIN
3.2 Parameter
Parameter digunakan untuk pertukaran data antara stored procedure dan function
dengan suatu aplikasi atau alat bantu yang memanggil stored procedure atau function
tersebut. Terdapat beberapa jenis parameter yaitu sebagai berikut.
• Parameter input, memungkinkan pemanggil untuk memberikan nilai data ke
stored procedure atau function.
• Parameter output, memungkinkan stored procedure untuk memberikan nilai data
atau variable cursor kembali ke pemanggil. Function tidak dapat menspesifikasi
parameter output.
• Return code, merupakan nilai integer yang dikembalikan oleh stored procedure ke
pemanggil. Jika stored procedure tidak mengatur nilai untuk return code secara
explisit, maka return code otomatis akan bernilai 0.
Ketika suatu stored procedure atau function dieksekusi, nilai parameter input dapat
diatur sebagai nilai konstan atau dengan menggunakan nilai dari suatu varibel. Parameter
output dan return code harus mengembalikan nilai mereka ke suatu variable. Parameter
dan return code dapat bertukar nilai data dengan variable Transact-SQL maupun variable
dari aplikasi. Jika suatu stored procedure dipanggil dari suatu batch atau skrip, nilai
parameter dan return code dapat menggunakan variable Transact-SQL yang didefinisikan
di batch yang sama.

3.3 Stored Procedure


Stored procedure dalam SQL Server adalah kumpulan dari satu atau lebih pernyataan
Transact-SQL atau suatu referensi ke metode Common Runtime Language (CLR)
Framework Microsoft .NET. Procedure dapat dikatakan seperti construct pada bahasa
pemrograman lainnya karena procedure dapat melakukan beberapa hal seperti berikut.
 Menerima parameter input dan mengembalikan banyak nilai dalam bentuk parameter
output ke program yang dipanggil.
 Mengandung pernyataan pemrograman yang dapat melakukan berbagai operasi
dalam database, termasuk memanggil procedure lainnya.
 Mengembalikan nilai status ke program yang dipanggil untuk mengindikasikan
kesuksesan atau kegagalannya, beserta penyebab kegagalan terebut.

Page 2
3.3.1 Manfaat Menggunakan Stored Procedure
 Mengurangi Traffic Jaringan Server/Client
Perintah pada suatu procedure dieksekusi sebagai satu batch kode. Hal ini
dapat mengurangi traffic jaringan secara signifikan antara server dan klien
karena hanya panggilan untuk mengeksekusi procedure yang dikirim melalui
jaringan. Tanpa enkapsulasi kode yang disediakan oleh suatu procedure, setiap
baris individual dari kode harus dikirim melalui jaringan.
 Memperkuat Keamanan
Banyak user dan program klien dapat melakukan operasi pada objek-
objek database pokok melalui suatu procedure, meskipun user dan program
tersebut tidak memiliki hak akses langsung pada objek-objek pokok tersebut.
Procedure tersebut mengontrol proses dan aktifitas apa yang dapat dilakukan,
serta tetap melindungi objek-objek database pokok tersebut. Hal ini dapat
mengurangi kebutuhan untuk memberikan hak akses pada level objek
individual dan menyederhanakan layer keamanan.
 Penggunaan Kode Secara Berulang
Kode untuk setiap operasi database yang berulang adalah kandidat
sempurna untuk enkapsulasi pada procedure. Hal ini dapat mengurangi
kebutuhan untuk menulis ulang kode yang sama, mengurangi
ketidakkonsistenan kode yang dibuat, dan memungkinkan suatu kode dapat
diakses dan dieksekusi oleh semua user atau aplikasi yang memproses hak
akses yang dibutuhkan.
 Mempermudah Pemeliharaan
Ketika aplikasi klien memanggil procedure dan menyimpan operasi
database pada tingkat data, hanya procedure yang harus di-update untuk setiap
perubahan pada database pokok. Level aplikasi tetap terpisah dan tidak perlu
mengetahui perubahan-perubahan pada layout, relationship, atau proses pada
database.
 Meningkatkan Performance
Secara default, suatu procedure telah ter-compile pada saat pertama kali
dieksekusi dan membuat suatu rencana eksekusi yang digunakan kembali

Page 3
untuk eksekusi selanjutnya. Karena prosesor query tidak harus membuat
rencana baru, secara tipikal akan mengurangi waktu untuk memproses
procedure. Jika terdapat perubahan signifikan pada table atau data yang
direferensikan oleh procedure, rencana yang telah di-compile sebelumnya
dapat menyebabkan procedure berjalan lebih lambat. Dalam hal ini,
melakukan compile ulang pada procedure dan memaksa pembuatan rencana
eksekusi baru dapat meningkatkan performance.

3.3.2 Jenis- Jenis Stored Procedure


3.3.2.1 User-Defined
Procedure Use-Defined dapat dibuat dalam database yang dibuat oleh
user atau dalam semua database system kecuali database Resource. Procedure
ini dapat dikembangkan baik pada Transact_SQL atau sebagai suatu referensi
ke metode CLR Framework Microsoft .NET.

3.3.2.2 Temporary
Procedure temporary merupakan suatu bentuk dari procedure user-
defined. Procedure ini mirip seperti procedure permanen, namun temporary
procedure disimpan dalam tempdb. Ada dua jenis temporary procedure, yaitu
local dan global. Kedua procedure tersebut dibedakan berdasarkan nama,
visibilitas, dan ketersediaannya. Procedure temporary local memiliki satu
tanda (#) sebagai karakter pertama dari namanya; procedure ini hanya dapat
dilihat oleh user yang sedang terkoneksi, dan akan terhapus ketika koneksinya
terputus. Sedangkan procedure temporary global memiliki dua tanda (##)
sebagai awalan dari namanya; dapat dilihat oleh semua user setelah dibuat,
dan akan terhapus pada akhir dari sesi terakhir yang menggunakan procedure
tersebut.

3.3.2.3 System
Procedure System adalah procedure bawaan dari SQL Server.
Procedur ini disimpan secara fisik dalam database internal Recourse yang

Page 4
tersembunyi, dan muncul secara logikal pada schema sys dari semua database,
baik database system maupun database user. Selain itu, database msdb juga
memiliki stored procedure system dalam schema dbo yang digunakan untuk
menjadwalkan peringatan dan pekerjaan. Karena procedure system diawali
dengan prefix sp_, tidak direkomendasikan untuk menggunakan prefix ini
ketika memberi nama procedure user-defined.
SQL Server mendukung procedure system yang menyediakan
antarmuka dari SQL Server ke program external dari banyak aktifitas.
Procedure tambahan ini menggunakan prefix xp_.

3.3.2.4 Extended User-Defined


Procedure extended memungkinkan untuk membuat rutin eksternal
dalam suatu bahasa pemrograman seperi bahasa C. Procedure ini adalah DLL
yang dapat dijalankan dan dimuat secara dinamis oleh SQL Server. Namun
procedure ini akan dihapus dalam versi SQL Server yang akan datang.
Sebaiknya jangan gunakan fitur ini dalam pengembangan terbaru, dan ubah
aplikasi yang saat ini menggunakan fitur ini.

3.3.3 Create Stored Procedure


Dalam SQL Server, stored procedure dapat dibuat dengan menggunakan
interface SQL Server Management Studio atau dengan menggunakan statement
Transact-SQL CREATE PROCEDURE. Untuk membuat procedure baru, diperlukan
permission CREATE PROCEDURE pada database yang diiginkan dan ALTER pada
schema di mana procedure akan dibuat.

3.3.3.1 SQL Server Management Studio


Langkah-langkah yang dilakukan untuk membuat stored procedure
baru dengan menggunakan SQL Server Management Studio adalah sebagai
berikut.
1. Pada Object Explorer, koneksikan SQL Server ke suatu Database Engine
dan buka koneksi tersebut.

Page 5
Gambar 3.1 Mengkoneksikan Database Engine SQL Server

2. Klik Databases, klik database yang diinginkan, dan kemudian klik


Programmability.
3. Klik kanan pada Stored Procedure, dan kemudian klik New Stored
Procedure.

Gambar 3.2 New Store Procedure

4. Pada meun Query, klik Specify Values for Template Parameters.

Page 6
Gambar 3.3 Menu Query  Specify Values for Template Parameters

5. Pada kotak dialog Specify Values for Template Parameters, masukkan


nilai-nilai parameter yang sesuai, seperti pada tabel 3.2 berikut.
Tabel 3.2 Properti Parameter
Parameter Keterangan
Author Nama User
Create Date Tanggal Sekarang
Description Deskripsi dari isi stored procedure
Procedure_name Nama procedure yang diinginkan
@param1 Nama parameter dengan tanda (@) sebagai
karakter pertama dari namanya. Contoh:
@ename
@Datatype_For_Param1 Tipe data dari parameter
Default_Value_For_Param1 Jika ada, isikan nilai default untuk
parameter tadi, seperti NULL

Page 7
Gambar 3.4 Kotak Dialog Specify Values for Template Parameters

6. Klik OK.
7. Pada Query Editor, ganti statement SELECT dengan pernyataan SQL
yang diiginkan.

Gambar 3.5 Statement untuk membuat procedure

8. Untuk menguji syntax tersebut, pada menu Query, klik Parse. Jika
muncul pesan error, sesuaikan pernyataan pada poin 7 dengan informasi
pada poin 5.
9. Untuk membuat procedure, pada menu Query klik Execute. Procedure
kemudian akan otomatis terbuat sebagai suatu objek dalam database.
10. Untuk melihat procedure yang terdaftar di Object Explorer, klik kanan
pada Stored Procedures dan pilih Refresh.

Page 8
Gambar 3.6 Store Procedure Yang Baru Dibuat

11. Untuk menjalankan procedure, pada Object Explorer, klik kanan pada
nama procedure yang telah dibuat dan pilih Execute Stored Procedure.
12. Pada jendela Execute Procedure, masukkan nilai-nilai parameter yang
diinginkan.

Gambar 3.7 Kotak Dialog Execute Store Procedure

Gambar 3.8 Store Procedure Yang Sudah Selesai DiExecute

3.3.3.2 Transact-SQL
Langkah-langkah yang dilakukan untuk membuat stored procedure
baru dengan menggunakan statement Transact-SQL adalah sebagai berikut.
1. Pada Object Explorer, koneksikan ke Database Engine.
2. Dari menu File, klik New Query.
3. Ketikkan query untuk membuat stored procedure. Berikut adalah perintah
umumnya.

Page 9
CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ;
number ]
[ { @parameter [ type_schema_name. ] data_type }
[ VARYING ] [ = default ] [ OUT | OUTPUT | [READONLY]
] [ ,...n ]
[ WITH <procedure_option> [ ,...n ] ]
[ FOR REPLICATION ]
AS { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }
[;]

Keterangan:
 schema_name: nama dari schema yang memiliki procedure yang
akan dibuat. Jika nama schema tidak dispesifikasikan, schema default
dari user yang membuat procedure akan dimasukkan secara otomatis
 procedure_name: nama dari procedure yang akan dibuat. Nama
procedure harus sesuai dengan aturan identifier dan harus unik di
dalam suatu skema. Sebaiknya jangan gunakan prefix sp_ karena
telah digunakan untuk procedure system.
 ; number : Nilai integer opsional yang digunakan untuk
mengelompokkan procedure-procedure dengan nama yang sama.
Kumpulan procedure ini dapat dihapus sekaligus dengan
menggunakan satu pernyataan DROP PROCEDURE.
 @parameter: suatu parameter yang dideklarasikan dalam procedure.
Spesifikasikan nama parameter dengan menggunakan tanda (@)
sebagai karakter pertama. Parameter bersifat local terhadap procedure
sehingga nama parameter yang sama dapat digunakan pada procedure
yang berbeda. Satu procedure dapat memiliki satu atau lebih
parameter, dengan maksimum 2100. Setiap nilai dari setiap parameter
harus dideklarasikan oleh user ketika memanggil procedure.
 [type_schema_name.]data_type: tipe data dari parameter dan
schema yang memiliki tipe data tersebut.
 VARYING: menspesifikasikan bahwa set hasil merupakan parameter
output. Parameter ini secara dinamis dibangun oleh procedure dan
isinya dapat beragam. Hanya berlaku untuk parameter cursor.

Page 10
 Default: Nilai default untuk parameter. Jika nilai default didefinisikan
untuk suatu parameter, procedure dapat dieksekusi tanpa
menspesifikasikan niai untuk parameter tersebut. Nilai default harus
konstan atau NULL.
 OUT|OUTPUT: Mengindikasikan bahwa parameter yang dibuat
adalah parameter output. Gunakan parameter OUTPUT untuk
mengambalikan nilai ke pemanggil procedure.
 READONLY: Mengindikasikan bahwa parameter tidak dapat diubah
dalam suatu procedure. Jika tipe parameter adalah table-value,
READONLY harus dispesifikasikan.
 FOR REPLICATION: menspesifikasikan bahwa procedure dibuat
untuk replikasi. Procedure yang dibuat dengan pilihan FOR
REPLICATION digunakan sebagai penyaring procedure dan
dieksekusi hanya selama replikasi. Parameter tidak dapat
dideklarasikan jika FOR REPLICATION dispesifikasikan.
 { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] } : Satu atau lebih
statement Transact-SQL yang mejadi body dari procedure. Pernyataan
BEGIN dan END dapat digunakan untuk membuka dan menutup
statement Transact_SQL tersebut.
Contoh:

CREATE PROC What_DB_is_that @ID int


AS
SELECT DB_NAME(@ID) AS ThatDB;

Query tersebut digunakan untuk membuat stored procedure dengan


nama What_DB_is_that dengan parameter @ID yang memiliki tipe data
integer. Stored procedure ini akan mengembalikan nama dari database
berdasarkan ID databse yang dimasukkan user. Sebagai contoh, jika query
EXEC What_DB_is_that 2 dijalankan, maka nama database dengan id 2
akan muncul.

Page 11
4. Untuk menjalankan procedure yang telah dibuat, ketikkan query untuk
mengeksekusi procedure dan kemudian klik Execute. Berikut adalah
perintah umum untuk mengeksekusi procedure.

EXECUTE [schema_name.] procedure_name [parameter_value]


[...n] [;]
-- Or
EXEC [schema_name.] procedure_name [@parameter
[parameter_value]] [...n] [;]
-- Or
EXECUTE [schema_name.] procedure_name [@parameter
[parameter_value]] [...n] [;]

Keterangan :
 Parameter_value: nilai dari parameter yang diinginkan. Nilai ini
dapat tidak dispesifikasikan jika parameter memiliki nilai default.
Contoh:

EXECUTE What_DB_is_that 2

Query di atas digunakan untuk mengeksekusi procedure


What_DB_is_that dengan nilai parameter 2.

3.3.4 Modify Stored Procedure


Sama seperti membuat stored procedure, untuk mengubah stored procedure
juga dapat dilakukan dengan menggunakan interface SQL Server Management
Studio maupun dengan statement Transact-SQL. Stored Procedure Transact_SQL
tidak dapat diubah menjadi stored procedure CLR dan sebaliknya. Untuk dapat
mengubah suatu procedure diperlukan permission ALTER PROCEDURE pada
procedure yang akan diubah.

3.3.4.1 SQL Server Management Studio


Langkah-langkah yang dilakukan untuk mengubah stored procedure
yang ada dengan menggunakan SQL Server Management Studio adalah
sebagai berikut.
1. Pada Object Explorer, koneksikan SQL Server ke suatu Database Engine
dan buka koneksi tersebut.

Page 12
2. Expand Databases, expand database yang diinginkan, dan kemudian
expand Programmability.
3. Expand Stored Procedures, klik kanan pada procedure yang ingin diubah,
dan pilih Modify.

Gambar 3.9 Klik kanan pada stored procedure

4. Ubah teks dari stored procedure.

Gambar 3.10 Teks ALTER stored procedure

5. Untuk menguji syntax, pada menu Query, klik Parse.


6. Untuk menyimpan perubahan ke definisi procedure, pada menu Query,
klik Execute.
7. Untuk menyimpan definisi procedure yang diubah sebagai skrip Transact-
SQL, pada menu File, klik Save As. Termina nama file atau ganti dengan
nama baru, kemudian klik Save.
Page 13
3.3.4.2 Transact-SQL
Langkah-langkah yang dilakukan untuk mengubah stored procedure
yang ada dengan menggunakan pernyataan Transact-SQL adalah sebagai
berikut.
1. Pada Object Explorer, koneksikan ke Database Engine.
2. Expand Databases, expand database yang memiliki procedure yang akan
diubah.
3. Dari menu File, klik New Query.
4. Ketikkan query untuk mengubah stored procedure. Berikut adalah perintah
umumnya.

ALTER { PROC | PROCEDURE } [schema_name.] procedure_name [


; number ]
[ { @parameter [ type_schema_name. ] data_type }
[ VARYING ] [ = default ] [ OUT | OUTPUT |
[READONLY]
] [ ,...n ]
[ WITH <procedure_option> [ ,...n ] ]
[ FOR REPLICATION ]
AS { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }
[;]

Contoh:

ALTER PROC What_DB_is_that @ID_DB int


AS
SELECT DB_NAME(@ID_DB) AS ThatDB;

Query tersebut digunakan untuk mengubah procedure


What_DB_is_that yang telah dibuat sebelumnya. Perubahan yang terjadi
terdapat pada nama parameter.
5. Untuk menyimpan perubahan pada definisi procedure, pada menu Query
klik Execute.
6. Untuk menyimpan definisi procedure yang diubah sebagai skrip Transact-
SQL, pada menu File, klik Save AS. Termina nama file atau ganti dengan
nama baru, kemudian klik Save.
7. Untuk menjalankan stored procedure yang telah diubah, ketikkan query
EXECUTE seperti pada subbab sebelumnya.

Page 14
3.3.5 Rename Stored Procedure
Untuk mengubah nama suatu procedure perlu diperhatikan bahwa nama
procedure harus sesuai dengan aturan identifier. Mengubah nama atau definisi dari
suatu procedure dapat menyebabkan objek yang bergantung mengalami kegagalan
jika objek tersebut tidak disesuaikan dengan perubahan yang telah dibuat. Selain itu,
untuk mengubah nama procedure diperlukan permission CREATE PROCEDURE
pada database, ALTER pada schema tempat procedure dibuat, dan ALTER
PROCEDURE untuk procedure yang akan diubah.

3.3.5.1 SQL Server Management Studio


Langkah-langkah yang dilakukan untuk mengubah nama stored
procedure yang ada dengan menggunakan SQL Server Management Studio
adalah sebagai berikut.
1. Pada Object Explorer, koneksikan SQL Server ke suatu Database Engine
dan buka koneksi tersebut.
2. Expand Databases, expand database yang diinginkan, dan kemudian
expand Programmability.
3. Expand Stored Procedures, klik kanan pada procedure yang akan diubah
namanya, dan kemudian klik Rename.

Gambar 3.11 Klik kanan untuk Rename

Page 15
4. Ubah nama procedure, dan tekan Enter.

Gambar 3.12 Mengubah nama stored procedure

5. Ubah nama procedure pada setiap objek atau skrip yang mereferensikan
procedure tersebut.

3.3.5.2 Transact-SQL
Langkah-langkah yang dilakukan untuk mengubah stored procedure
yang ada dengan menggunakan statement Transact-SQL adalah sebagai
berikut.
1. Pada Object Explorer, koneksikan ke Database Engine.
2. Dari menu File, klik New Query.
3. Ketikkan query untuk mengubah nama procedure dan kemudian klik
Execute. Berikut adalah query umum untuk mengubah nama procedure.

EXECUTE sp_rename [ ‘procedure_name’, ] [‘new_procedure_name’]

Keterangan:
 new_procedure_name: nama baru untuk procedure yang akan diubah.
Contoh:

EXECUTE sp_rename ‘What_DB_is_that’, ‘What_DB_is_it’

Query tersebut digunakan untuk mengubah nama procedure


What_DB_is_that menjadi What_DB_is_it.

3.3.6 Delete Stored Procedure


Menghapus suatu procedure dapat menyebabkan objek atau skrip yang
bergantung pada procedure tersebut mengalami kegagalan jika objek atau skrip
tersebut tidak diubah untuk mengantisipasi penghapusan procedure. Namun jika
procedure baru dibuat dengan nama dan parameter yang sama untuk menggantikan
procedure yang dihapus, objek lain yang mereferensikan procedure tadi akan tetap

Page 16
dapat berjalan dengan baik. Untuk dapat menghapus suatu procedure diperlukan
permission ALTER pada schema tempat procedure atau CONTROL pada procedure.

3.3.6.1 SQL Server Management Studio


Langkah-langkah yang dilakukan untuk menghapus stored procedure
yang ada dengan menggunakan SQL Server Management Studio adalah
sebagai berikut.
1. Pada Object Explorer, koneksikan SQL Server ke suatu Database Engine
dan buka koneksi tersebut.
2. Expand Databases, expand database yang diinginkan, dan kemudian
expand Programmability.
3. Expand Stored Procedures, klik kanan pada procedure yang ingin
dihapus, dan pilih Delete.

Gambar 3.13 Klik kanan untuk Delete

4. Untuk melihat objek yang bergantung pada procedure tersebut, klik View
Dependencies. Kemudian akan muncul kotak dialog yang berisi
dependensi dari procedure yang dipilih.

Page 17
Gambar 3.14 Kotak dialog Object Dependencies

5. Konfirmasi bahwa procedure yang dipilih sudah benar, kemudian klik


OK.
6. Hapus referensi ke procedure dari setiap objek dan skrip yang bergantung.

3.3.6.2 Transact-SQL
Langkah-langkah yang dilakukan untuk menghapus stored procedure
yang ada dengan menggunakan statement Transact-SQL adalah sebagai
berikut.
1. Pada Object Explorer, koneksikan ke Database Engine.
2. Expand Databases, expand database yang memiliki procedure yang akan
dihapus.
3. Dari menu File, klik New Query.
4. Dari Objet Explorer, expand Programmability dan kemudian expand
Stored Procedures. Cari nama stored procedure yang akan dihapus.
5. Ketikkan query untuk menghapus procedure. Berikut adalah query umum
untuk menghapus procedure.

DROP { PROC | PROCEDURE } { [ schema_name. ] procedure_name


}
6. Hapus referensi ke procedure dari setiap objek san skrip yang bergantung.
Page 18
Tugas 1:
Untuk menghindari penggunaan kode berulang, PT. Lepkom Mandiri ingin membuat
Stored Procedure untuk query yang sering digunakan. Query pertama digunakan untuk
mencari data karyawan (yang terdiri dari Nomor Karyawan, Nama Depan, Nama
Belakang, Pekerjaan, dan Gaji) berdasarkan nomor karyawannya dari tabel Employees
yang telah dibuat sebelumnya. Sedangkan query kedua digunakan untuk mengubah salary
karyawan tertentu dari tabel Employees. Di mana nomor karyawan dan salary yang
digunakan baik pada query pertama dan query kedua dapat diinput oleh user.
Anda diminta untuk membuat kedua Stored Procedure tersebut. Perlu diperhatikan
bahwa nama Stored Procedure harus unik. Oleh karena itu disarankan untuk
menambahkan NPM anda pada akhir nama Procedure. Setelah berhasil dibuat, cobalah
untuk mengeksekusi strored procedure tersebut dengan mengisikan nilai parameternya
masing-masing. Setelah itu dokumentasikan setiap langkah yang telah Anda lakukan.

3.4 Function
Sama seperti function pada bahasa pemrograman, user-defined function pada SQL
Server adalah suatu rutin yang dapat menerima parameter, melakukan suatu aksi seperti
perhitungan kompleks, dan mengembalikan hasil dari aksi tersebut sebagai suatu nilai.
Nilai yang dikembalikan dapat berupa satu nilai skalar maupun result set. Function dapat
digunakan dengan cara-cara seperti berikut.
 Pada statement Transact-SQL seperti SELECT
 Pada aplikasi yang memanggil function
 Pada definisi user-defined function lainnya.
 Untuk memberi parameter pada suatu view atau meningkatkan fungsionalitas dari
indexed view
 Untuk mendefinisikan suatu kolom pada table
 Untuk mendefinisikan constraint CHECK pada suatu kolom
 Untuk menggantikan suatu stored procedure
 Gunakan function inline sebagai predikat filter untuk suatu kebijakan keamanan

Page 19
3.4.1 Manfaat Menggunakan User-Defined Function
 Memungkinkan pemrograman modular
Suatu function dapat dibuat satu kali, disimpan di database, dan dipanggil
berapa kali pun dalam suatu program. Function user-defined dapat diubah
secara terpisah dari kode sumber program.
 Mempercepat eksekusi
Mirip seperti stored procedure, function user-defined Transact-SQL
mengurangi biaya kompilasi dari kode Transact-SQL dengan
menyembunyikan rencana dan menggunakannya kembali untuk dieksekusi
berulang kali. Hal ini berarti function user-defined tidak perlu diurai atau
dioptimasi ulang dengan setiap penggunaan sehingga akan membuat waktu
eksekusi menjadi lebih cepat.
 Mengurangi traffic jaringan
Suatu operasi yang menyaring data berdasarkan beberapa constraint
kompleks yang tidak dapat diekspresikan pada satu ekspresi skalar dapat
diekspresikan dalam suatu function. Function tersebut kemudian dapat
diminta pada klausa WHERE untuk mengurangi jumlah baris yang dikirim ke
klien.

3.4.2 Jenis-jenis Function


3.4.2.1 Scalar Function
Scalar function dapat menerima 0 sampai banyak parameter input dan
akan mengembalikan satu nilai. Scalar function mengmbalikan nilai dengan
salah satu dari tipe data scalar (int, char, varchar, dan lain-lain), tipe data text,
ntext, image, cursor, dan timestamp tidak termasuk. Function ini adalah
jenis function yang paling sering digunakan oleh programmer dalam Bahasa
pemrograman lainnya.

3.4.2.2 Table-Valued Functions


Function ini mengembalikan nilai dengan tipe data table. Terdapat
dua jenis table-valued function, yaitu inline table-valued function dan multi-

Page 20
statement table-valued function. Pada inline table-valued function, nilai yang
dikembalikan berasal dari satu statement SELECT sehingga tidak dibutuhkan
blok BEGIN … END dalam pembuatannya. Selain itu, dalam membuat
function ini juga tidak perlu menspesifikasikan nama variabel table (atau
definisi kolom untuk variabel table) karena struktur dari nilai yang
dikembalikan didapatkan dari kolom-kolom yang disusun dalam statement
SELECT. Karena hasilnya merupakan function dari kolom yang
direferensikan dalam statement SELECT, tidak boleh ada nama kolom yang
sama dan semua kolom yang disusun harus memiliki nama alias.
Sedangkan multi-satetment table-valued function dapat memiliki
lebih dari satu statement Transact-SQL. Ketika membuat function ini, struktur
table yang akan dikembalikan harus didefinisikan terlebih dahulu. Setelah
dibuat, function ini dapat digunakan pada klausa FROM dari perintah
Transact-SQL, tidak seperti stored procedure.

3.4.2.3 System Functions


SQL Server menyediakan banyak system function yang dapat
digunakan untuk melakukan banyak operasi. Function ini tidak dapat diubah.

3.4.3 Create User-Defined Function


User-defined function (UDF) dapat dibuat dengan menggunakan Transact-
SQL. Sebelum mulai membuat, terdapat beberapa hal yang perlu diperhatikan
sebagai berikut.
 UDF tidak bisa digunakan untuk melakukan aksi yang mengubah keadaan
database.
 UDF tidak boleh memiliki klausa OUTPUT INTO yang memiliki table
sebagai targetnya.
 UDF tidak dapat mengembalian banyak result set. Gunakan stored
procedure jika pengembalian banyak set nilai dibutuhkan.
 Penanganan Error tidak dapat digunakan pada suatu UDF. UDF tidak
mendukung statement TRY … CATCH, @ERROR atau RAISERRO.

Page 21
 UDF tidak dapat memanggil stored procedure, tapi dapat memanggil
extended stored procedure.
 UDF tidak bisa menggunakan SQL dinamis atau table temp. Variabel table
dapat digunakan.
 Statement SET tidak diijinkan pada UDF.
 Klausa FOR XML tidak diijinkan.
 UDF dapat bersarang; yang artinya suatu UDF dapat memanggil UDF
lainnya. Level sarang meningkat ketika function yang dipanggil memulai
ekseskusi, dan berkurang ketika function yang dipanggil selesai diekskusi.
UDF dapat bersarang sampai 32 level. Jika melewati level maksimum,
dapat menyebabkan seluruh rantai function yang diambil mengalami
kegagalan.
 Statement Service Broker berikut tidak bisa dimasukkan ke definisi dari
UDF Transact-SQL:
- BEGIN DIALOG CONVERSATION
- END CONVERSATION
- GET CONVERSATION GROUP
- MOVE CONVERSATION
- RECEIVE
- SEND
 Diperlukan permission CREATE FUNCTION pada database dan ALTER
pada schema tempat function dibuat. Jika function tersebut menspesifikasi
tipe user-defined, diperlukan permission EXECUTE pada tipe tersebut.
Berikutnya akan dibahas cara membuat function yang terdiri dari scalar
function, inline table-valued function, dan multi-statement table-valued function.

3.4.3.1 Scalar Function


Langkah-langkah yang dilakukan untuk membuat scalar function baru
dengan menggunakan statement Transact-SQL adalah sebagai berikut.
1. Pada Object Explorer, koneksikan ke Database Engine.
2. Dari menu File, klik New Query.

Page 22
3. Ketikkan query untuk membuat scalar function. Berikut adalah perintah
umum untuk membuatnya.

CREATE FUNCTION [ schema_name. ] function_name


( [ { @parameter_name [ AS ][ type_schema_name. ]
parameter_data_type
[ = default ] [ READONLY ] }
[ ,...n ]
]
)
RETURNS return_data_type
[ WITH <function_option> [ ,...n ] ]
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END
[ ; ]

Keterangan:
 schema_name: nama dari schema yang memiliki function yang akan
dibuat.
 function_name: nama dari function yang akan dibuat. Nama function
harus sesuai dengan aturan identifier dan harus unik di dalam suatu
skema.
 @parameter_name: suatu parameter dalam UDF. Satu atau lebih
parameter dapat dideklarasikan dalam satu function, dengan
maksimum 2100 parameter. Setiap nilai dari setiap parameter harus
dideklarasikan oleh user ketika memanggil function, kecuali jika
parameter tersebut memiliki nilai default. Spesifikasikan nama
parameter dengan menggunakan tanda (@) sebagai karakter pertama.
Parameter bersifat local terhadap function sehingga nama parameter
yang sama dapat digunakan pada function yang berbeda.
 [type_schema_name.]parameter_data_type: tipe data dari parameter
dan schema yang memiliki tipe data tersebut. Untuk function
Transact_SQL, semua tipe data dapat digunakan, kecuali tipe data
timestamp. Tipe data nonskalar, seperti cursor dan table tidak dapat
digunakan sebagai tipe data parameter dalam function Transact-SQL.

Page 23
 Default: Nilai default untuk parameter. Jika nilai default didefinisikan
untuk suatu parameter, function dapat dieksekusi tanpa
menspesifikasikan niai untuk parameter tersebut.
 READONLY: Mengindikasikan bahwa parameter tidak dapat diubah
dalam suatu function. Jika tipe parameter adalah table-value,
READONLY harus dispesifikasikan.
 return_data_type: merupakan nilai return untuk suatu scalar UDF.
Untuk function Transact-SQL, semua tipe data dapat digunakan,
kecuali tipe data timestamp. Tipe data nonskalar, seperti cursor dan
table tidak dapat digunakan sebagai tipe data parameter dalam
function Transact-SQL.
 function_body: menspesifikasikan bahwa sekumpulan statement
Transact_-SQL, yang secara bersamaan tidak menghasilkan efek
sampig seperti mengubah table, mendefinisikan nilai dari function
tersebut. function_body digunakan hanya pada scalar function dan
multi-statement table-valued-function. Pada scalar-function,
function_body adalah statement Transact_SQL yang bersama-sama
mengevaluasi ke nilai scalar.
 scalar_expression: menspesifikasikan nilai scalar yang dikembalikan
oleh scalar function.
Contoh:
CREATE FUNCTION TotalTable()
RETURNS int
AS
BEGIN
DECLARE @TableCount AS int;
SELECT @TableCount = COUNT(TABLE_NAME)
FROM INFORMATION_SCHEMA.TABLES WHERE
TABLE_TYPE='BASE TABLE';
RETURN @TableCount;
END;

Query di atas digunakan untuk membuat scalar function dengan nama


TotalTable yang mengembalikan nilai dengan tipe data int ke pemanggil.
Body dari function tersebut berada di antara statement BEGIN dan END.

Page 24
Dalam body tersebut variabel TableCount dideklarasikan dengan tipe data
integer. Kemudian digunakan fuction COUNT untuk menghitung jumlah
record pada field TABLE_NAME dalam information_schema.tables.
Hasil perhitungan tersebut kemudian dimasukkan ke dalam variabel
@TableCount untuk kemudian dikembalikan ke pemanggil.
4. Jalankan function yang telah dibuat dengan menggunakan perintah
SELECT diikuti dengan nama function dan nilai parameternya jika ada.
Berikut adalah perintah umumnya.

SELECT [schema_name.] function_name ([parameter_value]


[...n]) [;]

Contoh:

SELECT dbo.TotalTable();

Query di atas digunakan untuk mengeksekusi function TotalTable


dalam statement SELECT.

3.4.3.2 Inline Table-Valued Function


Langkah-langkah yang dilakukan untuk membuat inline table-valued
function baru menggunakan statement Transact-SQL adalah sebagai berikut.
1. Pada Object Explorer, koneksikan ke Database Engine.
2. Dari menu File, klik New Query.
3. Ketikkan query untuk membuat inline table-valued function. Berikut
adalah perintah umum untuk membuatnya.

CREATE FUNCTION [ schema_name. ] function_name


( [ { @parameter_name [ AS ] [ type_schema_name. ]
parameter_data_type
[ = default ] [ READONLY ] }
[ ,...n ]
]
)
RETURNS TABLE
[ WITH <function_option> [ ,...n ] ]
[ AS ]
RETURN [ ( ] select_stmt [ ) ]
[ ; ]

Keterangan:

Page 25
 TABLE: menspesifikasikan bahwa nilai return dari function ini adalah
sebuah tabel. Hanya nilai konstan dan @local_variables yang dapat
diberikan ke table-valued functions. Pada inline table-valued
functions, nilai return TABLE didefinisikan melalui suatu statement
SELECT. Inline functions tidak memiliki variabel return yang
berhubungan.
 Select_stmt: merupakan suatu statement SELECT yang
mendefinisikan nilai return dari inline table-valued function.
Contoh:

CREATE FUNCTION TableColumns(@table_name nvarchar (128))


RETURNS TABLE
AS
RETURN
SELECT TABLE_NAME, COLUMN_NAME, IS_NULLABLE,
DATA_TYPE, CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS WHERE
TABLE_NAME=@table_name;

Query di atas akan membuat function dengan nama TableColumns


yang memiliki parameter bernama @table_name dengan tipe data
nvarchar. Function tersebut akan mengembalikan result set berupa table.
Tabel tersebut berisi nama tabel, nama kolom, keterangan apakah kolom
boleh berisi null, tipe data kolom, dan panjang maksimum. Data tersebut
diambil dari information_schema.columns berdasarkan nama tabelnya.
Nama tabel ini dapat berubah sesuai keinginan pengguna function.
4. Jalankan function yang telah dibuat dengan menggunakan perintah
SELECT. Berikut adalah perintah umumnya.

SELECT * FROM [schema_name.] function_name


([parameter_value] [...n]) [;]

Contoh:
SELECT * FROM TableColumns(‘employees’);
--ATAU
SELECT * FROM TableColumns(‘emp’);

Query tersebut digunakan untuk mengeksekusi function TableColumns


dengan nilai parameter ‘employees’ atau ‘emp’.

Page 26
3.4.3.3 Multi-Statement Table-Valued Function
Langkah-langkah yang dilakukan untuk membuat inline table-valued
function baru dengan menggunakan pernyataan Transact-SQL adalah sebagai
berikut.
1. Pada Object Explorer, koneksikan ke Database Engine.
2. Dari menu File, klik New Query.
3. Ketikkan query untuk membuat mulit-satement table-valued function.
Berikut adalah perintah umum untuk membuatnya.

CREATE FUNCTION [ schema_name. ] function_name


( [ { @parameter_name [ AS ] [ type_schema_name. ]
parameter_data_type
[ = default ] [READONLY] }
[ ,...n ]
]
)
RETURNS @return_variable TABLE <table_type_definition>
[ WITH <function_option> [ ,...n ] ]
[ AS ]
BEGIN
function_body
RETURN
END
[ ; ]

Keterangan:
 @return_variable: merupakan variabel TABLE yang digunakan untu
menyimpan dan mengakumulasi baris-baris yang harus dikembalikan
sebagai nilai dari function.
 table_type_definition: mendefinisikan tipe data table untuk suatu
function. Deklarasi table termasuk definisi kolom dan constraint table
atau kolom.
 function_body: sekumpulan statement Transact-SQL yang akan
menghasilkan variabel return TABLE.
Contoh:

Page 27
CREATE FUNCTION GetTableColumns(@table_name nvarchar (128))
RETURNS @TableColumns TABLE (
tb_name nvarchar (128),
column_name nvarchar (128),
is_null varchar (3),
data_type nvarchar (128),
length int
)
AS
BEGIN
INSERT INTO @TableColumns
SELECT TABLE_NAME, COLUMN_NAME, IS_NULLABLE,
DATA_TYPE, CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME
=@table_name;

IF @@ROWCOUNT = 0
BEGIN
INSERT INTO @TableColumns VALUES ('No Table Found',
'', '', '', null)
END
RETURN
END;

Query ini akan membuat function dengan nama GetTableColumns


yang memiliki parameter bernama @table_name dengan tipe data
nvarchar. Function ini akan mengembalikan nilai berupa table dengan
nama variabel @TableColumns. Variabel table ini memiliki lima kolom,
yaitu tb_name dengan tipe data nvarchar, column_name dengan tipe data
nvarchar, is_null dengan tipe data varchar, data_type dengan tipe data
nvarchar, dan length dengan tipe data integer. Dalam body function yang
ada di antara BEGIN dan END, terdapat statement SELECT yang
digunakan untuk menampilkan nama tabel, nama kolom, keterangan
apakah kolom dapat berisi null, tipe data kolom, dan panjang
maksimumnya. Data tersebut diambil dari information_schema.columns
berdasarkan nama tabelnya. Nama tabel ini dapat berubah sesuai
keinginan pengguna function. Hasil dari perintah SELECT tersebut
kemudian dimasukkan ke dalam variabel table yang telah didefinisikan
sebelumnya. Kemudian, jika tidak terdapat hasil yang ditemukan maka
pesan “No Table Found” akan dimasukkan ke dalam field tb_name pada
variabel table @TableColumns.

Page 28
4. Jalankan function yang telah dibuat dengan menggunakan perintah
SELECT seperti pada inline table-valued function.

3.4.4 Modify User-Defined Function


Mengubah suatu function tidak akan mengubah permission dari function
tersebut, juga tidak akan mempengaruhi function, stored procedure, atau trigger yang
bergantung. Perintah ALTER FUNCTION tidak dapat digunakan untuk mengubah
scalar function menjadi table-valued function atau sebaliknya, dan mengubah inline
function menjadi multistatement function atau sebaliknya. Untuk mengubah suatu
function dierlukan permission ALTER pada function yang akan diubah atau pada
schema-nya. Jika function tersebut menspesifikasikan tipe user-defined, diperlukan
permission EXECUTE pada tipe tersebut.

3.4.4.1 Scalar Function


Langkah-langkah yang dilakukan untuk mengubah scalar function
yang ada dengan menggunakan statement Transact-SQL adalah sebagai
berikut.
1. Pada Object Explorer, koneksikan ke Database Engine.
2. Expand Databases, expand database yang memiliki function yang akan
diubah.
3. Dari menu File, klik New Query.
4. Ketikkan query untuk mengubah scalar function. Berikut adalah perintah
umumnya.

Page 29
ALTER FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ][ type_schema_name. ]
parameter_data_type
[ = default ] }
[ ,...n ]
]
)
RETURNS return_data_type
[ WITH <function_option> [ ,...n ] ]
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END
[ ; ]

Contoh:

ALTER FUNCTION TotalTable()


RETURNS int
AS
BEGIN
DECLARE @TableAmount AS int;
SELECT @TableAmount = COUNT(TABLE_NAME)
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE
TABLE';
RETURN @TableAmount;
END;

Query di atas digunakan untuk mengubah function TotalTable yang telah


dibuat sebelumnya. Perubahan yang terjadi terletak pada nama variabel yang
dgunakan untuk menampung hasil yang akan dikembalikan ke pemanggil.
5. Untuk menyimpan perubahan pada definisi function, pada menu Query
klik Execute.
6. Untuk menjalankan function yang telah diubah, gunakan statement
SELECT seperti pada langkah untuk membuat function.

3.4.4.2 Inline Table-Valued Function


Langkah-langkah yang dilakukan untuk mengubah inline table-valued
function yang ada dengan menggunakan statement Transact-SQL adalah
sebagai berikut.
1. Pada Object Explorer, koneksikan ke Database Engine.

Page 30
2. Expand Databases, expand database yang memiliki function yang akan
diubah.
3. Dari menu File, klik New Query.
4. Ketikkan query untuk mengubah inline table-valued function. Berikut
adalah perintah umumnya.

ALTER FUNCTION [ schema_name. ] function_name


( [ { @parameter_name [ AS ] [ type_schema_name. ]
parameter_data_type
[ = default ] }
[ ,...n ]
]
)
RETURNS TABLE
[ WITH <function_option> [ ,...n ] ]
[ AS ]
RETURN [ ( ] select_stmt [ ) ]
[ ; ]

Contoh:

CREATE FUNCTION TableColumns(@tb_name nvarchar (128))


RETURNS TABLE
AS
RETURN
SELECT TABLE_NAME, COLUMN_NAME, IS_NULLABLE, DATA_TYPE,
CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=@tb_name;

Query di atas digunakan untuk mengubah function TableColumns


yang telah dibuat sebelumnya. Perubahan yang terjadi terletak pada nama
parameter yang digunakan.
5. Untuk menyimpan perubahan pada definisi function, pada menu Query
klik Execute.
6. Untuk menjalankan function yang telah diubah, gunakan statement
SELECT seperti pada langkah untuk membuat function.

3.4.4.3 Multi-Statement Table-Valued Function


Langkah-langkah yang dilakukan untuk mengubah multi-statement
table-valued function yang ada dengan menggunakan statement Transact-SQL
adalah sebagai berikut.

Page 31
1. Pada Object Explorer, koneksikan ke Database Engine.
2. Expand Databases, expand database yang memiliki function yang akan
diubah.
3. Dari menu File, klik New Query.
4. Ketikkan query untuk mengubah multi-statement table-valued function.
Berikut adalah perintah umumnya.

ALTER FUNCTION [ schema_name. ] function_name


( [ { @parameter_name [ AS ] [ type_schema_name. ]
parameter_data_type
[ = default ] }
[ ,...n ]
]
)
RETURNS @return_variable TABLE <table_type_definition>
[ WITH <function_option> [ ,...n ] ]
[ AS ]
BEGIN
function_body
RETURN
END
[ ; ]

5. Untuk menyimpan perubahan pada definisi function, pada menu Query


klik Execute.
6. Untuk menjalankan function yang telah diubah, gunakan statement
SELECT seperti pada langkah untuk membuat function.

3.4.5 Delete User-Defined Function


Function dapat dihapus dengan menggunakan interface SQL Server
Management Studio atau statement Transact-SQL. Function tidak dapat dihapus jika
terdapat view atau function lain pada database yang mereferensikan function tersebut
dan dibuat dengan menggunakan SCHEMABINDING, atau terdapat kolom
terkomputasi, constraint CHECK, atau constraint DEFAULT yang mereferensikan
function tersebut. Function juga tidak dapat dihapus jika ada kolom terkomputasi
yang mereferensikan function tersebut dan telah diindeks. Untuk menghapus suatu
function diperlukan permission ALTER pada schema tempat function berada, atau
CONTROL pada function yang akan dihapus.

Page 32
3.4.5.1 SQL Server Management Studio
Langkah-langkah yang dilakukan untuk menghapus function yang
ada dengan menggunakan SQL Server Management Studio adalah sebagai
berikut.
1. Pada Object Explorer, koneksikan SQL Server ke suatu Database Engine
dan buka koneksi tersebut.
2. Expand Databases, klik database yang diinginkan, dan kemudian klik
Programmability.
3. Expand folder yang berisi function yang ingin dihapus. Function-function
dalam SQL Server dikelompokkan berdasarkan jenisnya.

Gambar 3.15 Daftar user-defined function

4. Klik kanan pada function yang ingin dihapus dan pilih Delete, dan
kemudian klik OK.

Gambar 3.16 Klik kanan untuk delete function

3.4.5.2 Transact-SQL
Langkah-langkah yang dilakukan untuk menghapus function yang
ada dengan menggunakan statement Transact-SQL adalah sebagai berikut.

Page 33
1. Pada Object Explorer, koneksikan ke Database Engine.
2. Expand Databases, expand database yang memiliki function yang akan
dihapus.
3. Dari menu File, klik New Query.
4. Ketikkan query untuk menghapus function. Berikut adalah query
umumnya.

DROP FUNCTION [ schema_name. ] function_name [;]

5. Pada menu Query klik Execute.

3.4.6 View User-Defined Function


Infromasi mengenai definisi atau properti dari suatu function dapat dilihat
dengan menggunakan interface SQL Server Management Studio. Informasi ini dapat
digunakan untuk memahami bagaimana suatu data diturunkan dari tabel sumbernya
atau untuk melihat pendefinisian data tersebut berdasarkan function. Langkah-
langkahnya adalah sebagai berikut.
1. Pada Object Explorer, expand Databases dan expand database tempat
function yang ingin dilihat berada.
2. Expand Programmability dan expand Functions.
3. Expand folder yang berisi function yang ingin dilihat. Function-function
dalam SQL Server dikelompokkan berdasarkan jenisnya.

Gambar 3.17 Daftar user-defined function

4. Klik kanan pada function yang diinginkan dan pilih Properties. Kemudian
akan muncul kotak dialog yang berisi properti dari function yang secara
umum adalah sebagai berikut.

Page 34
Gambar 3.17 Kotak dialog Function Properties

 Database: Berisi nama dari database tempat function berada.


 Server: Nama dari server yang digunakan.
 User: Nama user yang terhubung.
 Created Date: Berisi tanggal pembuatan function.
 Execute As: Konteks eksekusi dari function.
 Name: Nama function.
 Schema: Skema yang memiliki function.
 System Object: Mengindikasikan apakah function merupakan objek
system atau bukan. Bernilai True atau False.
 ANSI NULLs: Mengindikasikan apakah function dibuat dengan
pilihan ANSI NULL atau tidak.
 Encrypted: Mengindikasikan apakah function dienkripsi atau tidak.
Bernilai True atau False.
 Function Type: Jenis function
 Quoted identifier: Mengindikasikan apakah function dibuat dengan
pilihan quoted identifier atau tidak.
 Schema Bound: Mengindikasikan apakah function bersifat schema-
bound atau bukan. Bernilai True atau False.

Page 35
Tugas 2
PT Lepkom Mandiri ingin menghitung besar Tunjangan Hari Raya (THR) untuk
setiap karyawannya. Besar tunjangan ini berbeda-beda tergantung berapa lama seorang
karyawan telah bekerja di perusahaan tersebut. Lama bekerja diukur dari tanggal masuk
karyawan sampai tanggal hari raya. Ketentuan besarnya tunjangan tersebut adalah
sebagai berikut.
 Masa kerja < 1 tahun, besar THR = gaji x 75%
 Masa kerja > 1 tahun – < 2 tahun, besar THR = gaji x 100%
 Masa kerja > 2 tahun – < 4 tahun, besar THR = gaji x 110%
 Masa kerja > 4 tahun – < 6 tahun, besar THR = gaji x 120%
 Masa kerja > 6 tahun – < 8 tahun, besar THR = gaji x 130%
 Masa kerja > 8 tahun – < 10 tahun, besar THR = gaji x 140%
 Masa kerja > 10 tahun dan seterusnya, besar THR = gaji x 150%
Untuk itu Anda diminta membuat suatu function. Langkah-langkah yang dapat Anda
lakukan untuk membuat function ini adalah sebagai berikut.
1. Buatlah multi-statement table-valued function baru dengan nama sesuai keinginan
Anda. Untuk menghindari kesamaan nama function, sebaiknya gunakan NPM Anda
di akhir nama function.
2. Karena tanggal hari raya dapat berubah dan akan digunakan sebagai parameter ketika
memanggil function ini, maka buatlah tanggal hari raya menjadi parameter dalam
function tersebut dengan nama sesuai keinginan Anda, dan tipe datanya adalah Date.
3. Function ini akan mengembalikan nilai berupa table. Buatlah variabel table dengan
nama sesuai keinginan Anda yang berisi field-field yang akan menyimpan nomor
karyawan, nama depan dan nama belakang karyawan, gaji, masa kerja, serta besar
tunjangannya. Data dalam variabel table tersebut diambil dari table employees yang
telah dibuat sebelumnya. Oleh karena itu, sesuaikanlah tipe data dalam field pada
variabel table tadi dengan field-field yang ada pada table employees.
4. Untuk mendapatkan masa kerja karyawan, pada body function deklarasikan
variabel table yang berisi field masa kerja dan nomor karyawan. Kemudian
gunakanlah function DATEDIFF yang telah disediakan oleh system dengan nilai
parameter year, tanggal masuk karyawan dan tanggal hari raya untuk menghitung
Page 36
masa kerja tersebut. Kemudian masukkanlah hasil perhitungan masa kerja tersebut ke
dalam field masa kerja dalam variabel table tadi dengan menggunakan perintah
INSERT.
5. Masa kerja yang didapat pada poin 4 masih berupa table, sedangkan untuk
memasukkan masa kerja pada variabel table di poin 3, masa kerja harus berupa nilai
scalar. Oleh karena itu, Anda harus membaca satu per satu record masa kerja
karyawan dengan menggunakan perulangan dan memasukkan hasilnya ke dalam
suatu variabel scalar. Deklarasikan variabel scalar yang akan menyimpan masa kerja
berupa nilai scalar. Deklarasikan variabel yang akan menjadi loop counter dan
inisialisasikan nilainya dengan nomor employee yang paling kecil. Kemudian
deklarasikan variabel yang akan menjadi maxcounter dan inisialisasikan nilainya
dengan nomor employee yang tertinggi. Gunakanlah perulangan WHILE dengan
kondisi loop counter tidak sama dengan NULL dan loop counter kurang dari sama
dengan max counter.
6. Di dalam perulangan pada poin 5 lakukanlah hal-hal berikut. SELECT masa kerja
pada variabel skalar yang dibuat pada poin 5 dan ambil nilainya dari field masa kerja
dari variabel table yang dibuat pada poin 4 dengan kondisi nomor karyawan sama
dengan loop counter. Buatlah kondisi untuk menentukan besar tunjangan dengan
menggunakan nilai variabel masa kerja skalar tersebut sebagai pembanding. Lalu
masukkan seluruh data yang sesuai ke dalam variabel table pada poin 3 dengan
menggunakan nilai masa kerja scalar untuk mengisi field masa kerja dan kondisi
nomor karyawan sama dengan loop counter. Setelah setiap kondisi tunjangan dibuat,
lakukan penambahan 1 untuk loop counter.
7. Setelah berhasil dibuat, cobalah untuk mengeksekusi function tersebut dengan
mengisikan nilai parameternya dengan tanggal hari raya pada sekitar tahun 2000.
Setelah itu dokumentasikan setiap langkah yang telah Anda lakukan.

*Perlu diperhatikan bahwa langkah-langkah ini adalah saran untuk membuat function sesuai dengan kasus
yang diberikan. Cara untuk membuat function ini tidak terbatas pada langkah-langkah tersebut. Anda
dibebaskan untuk berkreasi sesuai keinginan Anda, namun tetap harus menghasilkan function yang sesuai
dengan kasus tersebut.

Page 37
Referensi

Biradar, Basavaraj. 2011. User-Defined Functions. [Online]. Diakses pada September


2017. Tersedia: http://sqlhints.com/tag/multi-statement-table-valued-user-defined-
function/
Chauhan, Shailendra. 2016. Difference Between Stored Procedure and Function in SQL
Server. [Online] Diakses pada September 2017. Tersedia:
http://www.dotnettricks.com/learn/sqlserver/difference-between-stored-procedure-
and-function-in-sql-server
Microsoft. 2017. Stored Procedures (Database Engine). [Online]. Diakses pada
September 2017. Tersedia: https://docs.microsoft.com/en-us/sql/relational-
databases/stored-procedures/ stored-procedures-database-engine
Microsoft. 2017. User-Defined Functions. [Online]. Diakses pada September 2017.
Tersedia: https://docs.microsoft.com/en-us/sql/relational-databases/user-defined-
functions/user-defined-functions

Page 38

Anda mungkin juga menyukai