Returns Table Function on PostgreSQL

Ok, sesuai judulnya, bagaimana cara penggunaan returns table di suatu fungsi dbms postgresql, ceritanya kemarin ada salah satu mahasiswa yang bertanya , contohnya seperti berikut :

Ada 3 buah table :
1. mahasiswa
2. mata_kuliah
3. khs

          Table "public.mahasiswa"
 Column |         Type          | Modifiers
--------+-----------------------+-----------
 nim    | character(9)          | not null
 nama   | character varying(50) | not null

          Table "public.mata_kuliah"
  Column   |         Type          | Modifiers
-----------+-----------------------+-----------
 kode_mk   | character(5)          | not null
 nama_mk   | character varying(30) |
 sks       | integer               |
 kurikulum | character(9)          |


         Table "public.khs"
 Column  |     Type     | Modifiers
---------+--------------+-----------
 nim     | character(9) |
 kode_mk | character(5) |
 ta      | character(9) |
 smt     | integer      |
 nilai   | character(1) |
Foreign-key constraints:


Dan isi dari masing-masing table :

nama_kelompok=> select * from mahasiswa;
    nim    | nama
-----------+------
 091051080 | abby
 091051081 | yoga
(2 rows)

nama_kelompok=> select * from mata_kuliah ;
 kode_mk |     nama_mk     | sks | kurikulum
---------+-----------------+-----+-----------
 tifs1   | Pemrograman SQL |   3 | 2007/2008
 tifs2   | Pemrograman Web |   3 | 2007/2008
 tifs3   | Jarkom          |   3 | 2007/2008
(3 rows)

nama_kelompok=> select * from khs;
    nim    | kode_mk |    ta     | smt | nilai
-----------+---------+-----------+-----+-------
 091051080 | tifs1   | 2012/2013 |   5 | A
 091051080 | tifs2   | 2012/2013 |   5 | A
 091051080 | tifs3   | 2012/2013 |   5 | A
(3 rows)

Nah, yang jadi pertanyaan adalah Buat fungsi yang jika di panggil :

nama_kelompok=> SELECT * from trans('091051080')

Hasilnya :

    nim    | kode_mk |     nama_mk     | nilai
-----------+---------+-----------------+-------
 091051080 | tifs1   | Pemrograman SQL | A
 091051080 | tifs2   | Pemrograman Web | A
 091051080 | tifs3   | Jarkom          | A

Jadi sederhannya adalah menampilkan query dari suatu table yang di joinkan :

Berikut fungsi yang sudah saya coba buat :

CREATE OR REPLACE FUNCTION trans(char) RETURNS table (nim char, kode_mk char, nama_mk varchar,nilai char) AS
$$
BEGIN
 return query select khs.nim, khs.kode_mk, mata_kuliah.nama_mk, khs.nilai from khs join mata_kuliah using (kode_mk) where khs.kode_mk=mata_kuliah.kode_mk and khs.nim=$1 ;

    RETURN;
END;
$$
LANGUAGE 'plpgsql' ;

semoga membantu :)







EmoticonEmoticon