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. mahasiswa2. mata_kuliah3. khs
Table "public.mahasiswa"
Column | Type | Modifiers
--------+-----------------------+-----------
nim | character(9) | not null
nama | character varying(50) | not nullTable "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