Anda di halaman 1dari 8

Modul 13 : Dasar Pemrograman T-SQL

13.1. Waktu Pelaksanaan Praktikum


Durasi kegiatan praktikum = 170 menit, dengan rincian sebagai berikut (misalkan):
1. 10 menit untuk penjelasan singkat tentang modul
2. 100 menit untuk pengayaan
3. 60 menit pembahasan

13.2. Tujuan
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat:
1. Memahami dasar pemrograman T-SQL seperti deklarasi variabel, penugasan variabel, seleksi
kondisi, iterasi
2. Membuat stored procedure dan user defined function (UDF)

13.3. Alat Dan Bahan


1. Komputer

13.4. Dasar Teori


13.4.1. Dasar Pemrograman T-SQL
Bab ini berisi dasar-dasar pemrograman pada DBMS. Tiap-tiap DBMS memiliki bahasa dan struktur
pemrograman masing-masing. Transact-SQL atau T-SQL merupakan bahasa pemrograman yang proprietary
dari Microsoft SQL Server. Materi dalam dasar pemrograman ini meliputi deklarasi variabel, penugasan,
struktur kendali seperti seleksi kondisi, iterasi, stored procedure, user defined function (UDF).

13.4.2. Deklarasi Variabel


Untuk mendeklarasikan variabel dalam T-SQL sintaksis yang digunakan adalah:
DECLARE @namaVariabel tipe_data [ = nilai_inisialisasi ]

Misalnya apabila ingin membuat variabel bertipe data VARCHAR(255) maka sintaksisnya:
DECLARE @name VARCHAR(255) = 'Budi';

13.4.3.Penugasan/Pengisian Variabel
Untuk mengisi variabel selain melalui inisialisasi melalui deklarasi, digunakan sintaksis berikut.
SET @namaVariabel = nilai

Misalnya apabila ingin mengisi variabel @name maka sintaksisnya:


SET @name = 'Ani';

Apabila nilai suatu variabel diisi melalui hasil query SELECT maka sintaksis yang digunakan adalah
sebagai berikut.
SELECT @nameVariabel = namaKolom FROM tabel

Misalnya apabila ingin mengisi variabel @name dari hasil query SELECT pada instructor:
SELECT @name = name FROM instructor where ID=14365;

13.4.4.Mencetak Variabel di Console/Messages


Untuk mencetak suatu variabel atau pesan tertentu di console/messages gunakan perintah PRINT.
Misalnya untuk mencetak variabel @name sebagai berikut.
PRINT 'Nama instructor yang dipilih = ' + @name

13.4.5. Mengonversi tipe data dengan CAST/CONVERT


Untuk mengubah atau mengonversi suatu variabel ke tipe data lain, gunakan fungsi CAST atau
CONVERT. Fungsi ini berguna misalnya apabila ingin mencetak variabel yang bukan string. Misalnya berikut
ini contoh mengonversi tipe data INT menjadi VARCHAR(5).
DECLARE @nilai INT = 85

PRINT CAST(@nilai as VARCHAR(5))

Contoh lain misalnya mengubah dari VARCHAR menjadi INT pada klausa SELECT:
SELECT CAST(ID AS INT) as ID_INT, * FROM instructor

13.4.6. Seleksi Kondisi


Untuk melakukan seleksi kondisi ada dua sintaksis yang dapat digunakan yaitu sintaksis IF dan CASE.
a. IF…ELSE

Sintaksis untuk seleksi kondisi menggunakan IF…ELSE adalah sebagai berikut.


IF Boolean_expression
{ sql_statement | statement_block }
[ ELSE
{ sql_statement | statement_block } ]
Misalnya:
DECLARE @nilai INT
SET @nilai = 80
IF @nilai > 80
BEGIN
PRINT 'Nilai '+ CAST(@nilai as varchar(5)) +' = Baik'
END
ELSE IF @nilai > 60
BEGIN
PRINT 'Nilai '+ CAST(@nilai as varchar(5)) +' = Cukup Baik'
END
ELSE
BEGIN
PRINT 'Nilai '+ CAST(@nilai as varchar(5)) +' = Kurang'
END

b. CASE…WHEN

Sintaksis untuk seleksi kondisi menggunakan IF…ELSE adalah sebagai berikut.


Simple CASE expression:
CASE input_expression
WHEN when_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Searched CASE expression:
CASE
WHEN Boolean_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Misalnya dalam contoh berikut melakukan seleksi kondisi CASE…WHEN untuk menampilkan nama
hari berdasarkan inisial dari kolom day dari tabel time_slot.
SELECT *, day_name =
CASE
WHEN day = 'M' THEN 'Monday'
WHEN day = 'T' THEN 'Tuesday'
WHEN day = 'W' THEN 'Wednesday'
WHEN day = 'R' THEN 'Thursday'
WHEN day = 'F' THEN 'Friday'
END
FROM time_slot

13.4.7.Iterasi
Sintaksis untuk melakukan iterasi dalam T-SQL menggunakan WHILE adalah sebagai berikut. WHILE
sangat penting untuk digunakan dalam iterasi data yang dikenal dengan CURSOR. Namun, materi ini tidak
akan membahas penggunaan CURSOR itu sendiri.
WHILE Boolean_expression
{ sql_statement | statement_block | BREAK | CONTINUE }
Misalnya untuk mencetak angka 1 sampai 5 menggunakan WHILE adalah sebagai berikut.
DECLARE @intFlag INT
SET @intFlag = 1
WHILE (@intFlag <=5)
BEGIN
PRINT @intFlag
SET @intFlag = @intFlag + 1
END
Dalam iterasi untuk keluar dari iterasi keyword yang digunakan adalah BREAK sedangkan untuk
melewati (skip) iterasi keyword yang digunakan adalah CONTINUE.

13.4.8. STORED PROCEDURE


Stored procedure (SP) merupakan suatu prosedur seperti dalam bahasa pemrograman umumnya
yang dapat dipanggil dan dijalankan di suatu DBMS. SQL Server memiliki system stored procedure yang
bersifat global dan dapat dipanggil dari database apapun. System stored procedure menggunakan awalan
sp_ Namun pengguna juga dapat membuat sendiri prosedur yang berlaku dalam suatu database tertentu.

13.4.8.1. Pembuatan Stored Procedure


Sintaksis untuk membuat stored procedure adalah sebagai berikut.
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 ] }
[;]
Contoh berikut adalah stored procedure untuk menampilkan instructor sebagai advisor serta student yang
dibimbing.
CREATE PROCEDURE GetAdvisor
AS
SELECT * FROM instructor i
JOIN advisor a ON i.ID=a.i_ID
JOIN student s ON s.ID=a.s_ID

13.4.8.2. Pemanggilan Stored Procedure


Untuk memanggil stored procedure gunakan keyword EXEC atau EXECUTE. Contoh pemanggilan
stored procedure GetAdvisor di atas adalah sebagai berikut.
EXECUTE GetAdvisor
13.4.8.3. Parameter
Stored procedure dapat menerima suatu parameter masukan seperti halnya prosedur dalam
pemrograman. Stored procedure memiliki dua jenis parameter, yaitu input dan output.

a. Parameter Input

Input parameter berfungsi untuk memasukkan nilai argumen ke parameter untuk diproses di dalam
prosedur. Sintaksis untuk stored procedure dengan parameter input adalah sebagai berikut.
CREATE { PROC | PROCEDURE } procedure_name @parameter1 tipe_data, ...

Berikut ini adalah contoh stored procedure untuk menampilkan instructor sebagai advisor serta
student yang dibimbing tergantung dari suatu instructor tertentu (dengan satu parameter yaitu nama
instructor-nya).
CREATE PROCEDURE GetAdvisor2
@name VARCHAR(50)
AS
SELECT * FROM instructor i
JOIN advisor a ON i.ID=a.i_ID
JOIN student s ON s.ID=a.s_ID
WHERE i.name LIKE @name
GO
Untuk memanggil stored procedure dengan parameter maka setelah nama stored procedure
tambahkan spasi kemudian nilai dari parameternya, pisahkan dengan koma untuk parameter kedua, dst.
EXEC GetAdvisor2 '%na%'

b. Parameter Output
Output parameter berfungsi untuk mengeluarkan/mengembalikan suatu nilai dari dalam prosedur
ke parameter supaya nantinya dapat diproses di luar prosedur. Sintaksis untuk stored procedure dengan
parameter output adalah sebagai berikut.
CREATE { PROC | PROCEDURE } procedure_name @parameter1 tipe_data OUT/OUTPUT, ...

Contoh berikut untuk membuat stored procedure untuk menampilkan daftar instructor yang berada
di suatu department (misalnya “Comp. Sci.”) beserta salary tertinggi yang dikembalikan melalui parameter
output.
CREATE PROCEDURE GetInstructorSalary
@dept_name VARCHAR(50),
@max_salary MONEY OUTPUT
AS
SELECT * FROM instructor
WHERE dept_name = @dept_name

SELECT @max_salary = MAX(salary) FROM instructor


WHERE dept_name = @dept_name
GO
Untuk memanggil stored procedure dengan parameter output maka buat dulu variabel untuk
menyimpan nilai hasil output parameter dan di perintah EXEC/EXECUTE di akhir nama variabel tambahkan
keyword OUT/OUTPUT
DECLARE @max_salary MONEY;
DECLARE @dept_name VARCHAR(50) = 'Statistics';
EXECUTE GetInstructorSalary @dept_name, @max_salary OUT
PRINT 'Maximum salary in Dept. ' + @dept_name + ' = ' + CAST(@max_salary AS
VARCHAR(50))

13.4.9. User Defined Function (UDF)


Berbeda dengan stored procedure, user defined function (UDF) digunakan untuk mengembalikan
suatu nilai seperti halnya fungsi dalam pemrograman. UDF dapat dipanggil di dalam suatu klausa SELECT,
WHERE, HAVING, pada DML UPDATE, INSERT, DELETE sedangkan stored procedure tidak bisa. UDF juga
dapat digunakan untuk mendefinisikan kolom, mendefinisikan CHECK constraint. UDF memiliki beberapa
jenis nilai kembalian, antara lain scalar (nilai tunggal) dan result-set/table (beberapa baris).
Materi berikut ini hanya menjelaskan tentang pembuatan UDF yang mengembalikan nilai scalar.
Sintaksis untuk membuat UDF adalah sebagai berikut.
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
[ ; ]
Keyword RETURNS digunakan untuk menentukan tipe data nilai kembalian, sedangkan RETURN digunakan
untuk mengembalikan nilai.

CONTOH UDF 1

UDF berikut berfungsi untuk mengembalikan nama hari tergantung dari inisial namanya adalah sebagai
berikut.
CREATE FUNCTION GetDayName
(@initial VARCHAR(1))
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @name VARCHAR(50)
SET @name =
CASE
WHEN @initial = 'M' THEN 'Monday'
WHEN @initial = 'T' THEN 'Tuesday'
WHEN @initial = 'W' THEN 'Wednesday'
WHEN @initial = 'R' THEN 'Thursday'
WHEN @initial = 'F' THEN 'Friday'
END
RETURN @name
END;

13.4.9.1. Pemanggilan UDF


Untuk memanggil UDF bisa dilakukan di dalam SELECT, WHERE, HAVING, pada DML UPDATE, INSERT,
DELETE. Misalnya contoh berikut untuk memanggil Contoh UDF 1 GetDayName di atas menggunakan
SELECT.
SELECT dbo.GetDayName('W')

Contoh berikut untuk memanggil UDF menggunakan query SELECT.


SELECT *, dbo.GetDayName(day) as day_name FROM time_slot

CONTOH UDF 2

UDF berikut berfungsi untuk mengembalikan lama suatu time_slot (jadwal kuliah) dalam satuan
menit.
CREATE FUNCTION GetSlotDuration(

@start_hour INT,

@start_min INT,

@end_hour INT,

@end_min INT
)

RETURNS INT

AS

BEGIN

DECLARE @total_min INT;

SET @total_min = (@end_hour*60+@end_min) - (@start_hour*60+@start_min);

RETURN @total_min

END

Contoh berikut untuk memanggil UDF GetSlotDuration menggunakan query SELECT dan pada klausa
WHERE, yang mana GetSlotDuration > 50 menit.
SELECT *, dbo.GetSlotDuration(start_hr,start_min,end_hr,end_min) as Duration

FROM time_slot

WHERE dbo.GetSlotDuration(start_hr,start_min,end_hr,end_min) > 1*50

13.5. Latihan
1. Buat stored procedure yang menampilkan advisor termasuk data instructor dan student dengan
parameter nama student yang dicari (sebagai masukan dalam parameter input).
2. Buat stored procedure yang menampilkan kuliah yang diambil pada tabel takes termasuk data student
dengan parameter nama student yang dicari (sebagai masukan dalam parameter input).
3. Buat fungsi GetNilaiHuruf untuk mengembalikan nilai akhir huruf dari nilai angka dengan ketentuan
sebagai berikut.
No Rentang nilai angka Nilai Huruf
1 85 < nilai < 100 A
2 80 < nilai <= 85 A-
3 75 < nilai <= 80 B+
4 70 < nilai <= 75 B
5 65 < nilai <= 70 B-
6 60< nilai <= 65 C+
7 55 < nilai <= 60 C
8 40 < nilai <= 55 D
9 Nilai < 40 E

4. Gunakan fungsi di atas untuk mencari data kuliah yang diambil (pada tabel takes) beserta data student
dengan yang memiliki nilai A dan A- dengan memanfaatkan fungsi GetNilaiHuruf.
Contoh penggunaannya pada klausa SELECT/WHERE adalah GetNilaiHuruf(score).

Anda mungkin juga menyukai