Dalam sistem basis data relasional, fungsi merupakan objek yang digunakan untuk melakukan pemrosesan data dan mengembalikan hasil tertentu. Pada Microsoft SQL Server, fungsi dibedakan menjadi beberapa jenis, salah satunya adalah Table Valued Function (TVF).
Table Valued Function (TVF) adalah fungsi yang mengembalikan hasil dalam bentuk tabel, sehingga dapat diperlakukan seperti tabel biasa dalam query SQL, misalnya dapat digunakan dalam klausa SELECT, JOIN, maupun FROM.
Karakteristik Table Valued Function
Beberapa karakteristik utama TVF adalah:
- Mengembalikan tipe data berupa tabel.
- Dapat menerima parameter (opsional).
- Dapat digunakan seperti view, tetapi lebih fleksibel karena dapat menerima parameter.
- Tidak dapat melakukan perubahan data (INSERT, UPDATE, DELETE) secara langsung pada tabel di dalam fungsi (bersifat read-only).
Jenis Table Valued Function
TVF dibedakan menjadi dua jenis utama yaitu Inline Table Valued Function dan Multi-Statement Table Valued Function. Inline TVF memiliki bentuk yang sederhana dan hanya berisi satu pernyataan SELECT. Sedangkan Multi-Statement Table Valued Function memungkinkan penggunaan beberapa pernyataan SQL dan menggunakan variabel tabel sebagai nilai kembalian.
Contoh Inline Table Valued Function
Menggunakan tabel pada materi inner join berikut contoh Inline Table Valued Function untuk menampilkan nilai siswa:
CREATE FUNCTION fn_GetNilaiSiswa()
RETURNS TABLE
AS
RETURN
(
SELECT s.ID_Siswa, s.Nama_Siswa, n.Nilai
FROM Siswa s
LEFT JOIN Nilai_Siswa n ON s.ID_Siswa = n.ID_Siswa
);
Cara pemanggilan fungsi:
SELECT * FROM fn_GetNilaiSiswa();
Penjelasan:
- Fungsi ini mengembalikan data gabungan antara tabel Siswa dan Nilai_Siswa.
- Siswa yang belum memiliki nilai tetap ditampilkan (karena menggunakan LEFT JOIN).
Contoh Multi-Statement Table Valued Function
CREATE FUNCTION fn_GetNilaiDiAtas(@Batas INT)
RETURNS @Hasil TABLE
(
ID_Siswa INT,
Nama_Siswa VARCHAR(50),
Nilai INT
)
AS
BEGIN
INSERT INTO @Hasil
SELECT s.ID_Siswa, s.Nama_Siswa, n.Nilai
FROM Siswa s
INNER JOIN Nilai_Siswa n ON s.ID_Siswa = n.ID_Siswa
WHERE n.Nilai > @Batas;
RETURN;
END;
Cara pemanggilan fungsi:
SELECT * FROM fn_GetNilaiDiAtas(80);
Penjelasan:
- Fungsi menerima parameter @Batas.
- Hanya menampilkan siswa dengan nilai di atas batas tertentu.
- Menggunakan variabel tabel @Hasil.
TVF Tanpa Melibatkan Tabel Tertentu
TVF tidak selalu harus mengambil data dari tabel fisik. Fungsi juga dapat menghasilkan tabel secara dinamis. Misalnya membuat deret angka dengan informasi tambahan berupa hasil kuadrat dan kategori apakah angka tersebut genap atau ganjil.
Fungsi berikut menghasilkan tabel dengan beberapa kolom yang disimpan di variabel @Hasil:
CREATE FUNCTION fn_DeretLengkap(@Max INT)
RETURNS @Hasil TABLE
(
Angka INT,
Kuadrat INT,
Kategori VARCHAR(10)
)
AS
BEGIN
DECLARE @i INT = 1;
WHILE @i <= @Max
BEGIN
INSERT INTO @Hasil
VALUES
(
@i,
@i * @i,
CASE
WHEN @i % 2 = 0 THEN 'Genap'
ELSE 'Ganjil'
END
);
SET @i = @i + 1;
END
RETURN;
END;
Cara pemanggilan fungsi:
SELECT * FROM fn_DeretLengkap(5);
Hasil:
| Angka | Kuadrat | Kategori |
| 1 | 1 | Ganjil |
| 2 | 4 | Genap |
| 3 | 9 | Ganjil |
| 4 | 16 | Genap |
| 5 | 25 | Ganjil |
Kelebihan dan Kekurangan TVF
Kelebihan:
- Modular dan reusable.
- Mendukung parameter.
- Dapat digunakan seperti tabel biasa.
- Mempermudah query kompleks.
Kekurangan:
- Tidak dapat memodifikasi data.
- Multi-statement TVF cenderung lebih lambat.
- Debugging lebih sulit dibanding stored procedure.
Kesimpulan
- Table Valued Function merupakan fitur penting dalam SQL Server yang memungkinkan pengembang untuk membuat fungsi yang mengembalikan data dalam bentuk tabel. TVF sangat berguna dalam membangun query modular, reusable, dan parameterized.
- Terdapat dua jenis utama TVF, yaitu Inline dan Multi-Statement, yang masing-masing memiliki kelebihan dan keterbatasan. Selain itu, TVF juga dapat digunakan tanpa bergantung pada tabel fisik, sehingga fleksibel dalam menghasilkan data dinamis.
