Table Valued Function pada MS SQL Server

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:

AngkaKuadratKategori
11Ganjil
24Genap
39Ganjil
416Genap
525Ganjil

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.

Materi slide dapat dilihat di sini.

Mungkin Anda Menyukai

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *