LANDASAN TEORI
FUNGSI
Fungsi SQL adalah sebuah kumpulan query, biasanya query yang detail dan panjangyang dibungkus menjadi satu dan disimpan dalam database dan kemudian apabiladiperlukan hanya tinggal mengaksesnya tanpa mengetikan query detail.
KONSEP DARI FUNGSI :
- Nama Fungsi
- Nomor dari fungsi argument
- Type data dari setiap argument
- Type dari hasil fungsi
- Fungsi action
- Bahasa yang digunakan dalam fungsi action
db_personal=> CREATE FUNCTION perkalian (FLOAT, FLOAT, FLOAT)
db_personal-> RETURNS FLOAT
db_personal-> AS 'SELECT ($1 + $2) * $3;'
db_personal-> LANGUAGE 'sql';
CREATE
db_personal=> SELECT perkalian (10,10,10);
perkalian
-----------
200
(1 row)
Contoh yang lain dalam pembuatan fungsi SQL untuk mencari jumlah pegawai dari tabel
pegawai berikut :
Berikut kode SQL nya :
Create function jumlah_pegawai()
Returns bigint
As ‘select count(*) as jumlah_pegawai from pegawai;’
Language ‘sql’;
Maka hasilnya sebagai berikut :
Select jumlah_pegawai();
Jumlah_pegawai
----------------------
4
(1 row)
Fungsi PL/PGSQL
PL/PGSQL merupakan bahasa yang lain untuk membuat sebuah fungsi, biasanya bahasa ini digunakan untuk menangani fungsi yang lebih kompleks. Pl/pgsql sudah terdapat dalam instalasi PostgreSQL.
Keuntungan penggunaan Fungsi PL/PGSQL :
- Meningkatkan kinerja karena mengurangi pengiriman kode dari klien ke server.
- Meningkatkan keamanan karena pengaksesan data tertentu ditangani dalam server.
- Meningkatkan konsistensi data saat sejumlah aplikasi memanggil prosedur yang sama;
Sebaliknya kelemahannya yaitu server akan lebih terbebani karena banyak proses yang harus ditangani. Sedangkan query PL/PGSQL agar lebih mudah di pahami akan dibagi menjadi 2 yaitu pembuatan fungsi dan pembuatan definisi.
Breikut struktur querynya :
- Pembuatan fungsi
CREATE [OR REPLACE] FUNCTION nama_fungsi ( argtype , ... ])
RETURNS tipe_data
AS ‘definisi’
LANGUAGE ‘plpgsql’;
- Pembuatan definisi
DECLARE nama_variable tipe_data /* deklarasi variabel, type */
BEGIN
/* prosedural dan SQL masuk disini seperti select, update dan sebagainya*/
Return nama_variable /* blok ini yang wajib */
END;
- Menghapus fungsi
DROP FUNCTION nama_fungsi(paramater, parameter, parameter ... );
Berikut ini implementasi dari contoh penggunaan fungsi dengan bahasa PL/PGSQL:
db_personal=> CREATE FUNCTION pl_caripegawai (integer)
db_personal-> RETURNS text
db_personal-> AS 'DECLARE hasil TEXT;
db_personal'> BEGIN
db_personal'> SELECT INTO hasil nama as nama_mahasiswa
db_personal'> FROM pegawai
db_personal'> WHERE id = $1;
db_personal'> RETURN hasil;
db_personal'> END;'
db_personal-> LANGUAGE 'plpgsql';
CREATE
db_personal=> SELECT pl_caripegawai (1);
pl_caripegawai
-----------------
Hendro
(1 row)
db_personal=> SELECT pl_caripegawai (2);
pl_caripegawai
--------------------
Tika
(1 row)
Contoh berikut menunjukkan query percabangan yang akan menampilkan nilai terkecil dari dua buah parameter :
create function percabangan (x integer,y integer)
returns integer
as ‘declare nilai_terkecil integer;
begin
if x < y then
select into nilai_terkecil x;
else
select into nilai_terkecil y;
end if;
return nilai_terkecil;
end;’
language ‘plpgsql’;
Hasil sebagai berikut :
Select percabangan (300,250);
Percabangan
-----------------
250
(1 row)
Contoh berikut menunjukkan query perulangan yang akan menampilkan akumulasi dari jumlah perulangan :
Create function perulangan (a integer,b integer)
Returns integer
As ‘ declare nilai_awal integer default a;
Hasil integer default 0;
Begin
Loop
If nilai_awal > b then
Exit;
End if;
Hasil := hasil+nilai_awal;
Nilai_awal := nilai_awal+1;
End loop;
Return hasil;
End;’
Language ‘plpgsql’;
Hasilnya sebagai berikut :
Select perulangan (1,5);
Perulangan
----------------
15
1 (row)
TRIGGER
Trigger digunakan untuk menyisipkan sebuah fungsi pada saat suatu record di-INSERT, UPDATE dan DELETE. Trigger sangat ideal untuk mengecek atau memodifikasi sebuah data pada kolom sebelum dimasukkan ke dalam database, sehingga sebuah fungsi dapat dipanggil setiap saat secara otomatis ketika sebuah row akan dimodifikasi. Ciri khas dari fungsi yang diperuntukkan untuk trigger adalah menghasilkan output bertipe OPAQUE. Tipe opaque adalah sebuah tipe yang menginformasikan pada database bahwa fungsi tersebut tidak menghasilkan satu dari tipe
data yang ditetapkan SQL dan tidak secara langsung dapat digunakan dalam statemen SQL. Language (bahasa) PL/PGSQL dapat digunakan untuk trigger procedure, fungsi
untuk trigger ini memiliki beberapa variabel khusus yang terdeklarasi secara otomatis. Variabel tersebut antara lain:
- NEW :Variabel yang berisi nilai baru suatu record pada saat INSERT atau UPDATE, bertipe RECORD.
- OLD :Variabel yang berisi nilai lama suatu record pada saat UPDATE atau DELETE, juga bertipe RECORD.
Berikut ini beberapa contoh penggunaan fungsi sebagai trigger procedure:
Contoh : trigger berikut ini memastikan isi field atau kolom nama pada tabel anggota selalu huruf besar.
db_personal=> CREATE FUNCTION tes_trigger()
db_personal-> RETURNS opaque
db_personal-> AS 'BEGIN
db_personal'> NEW.nama := UPPER(NEW.nama);
db_personal'> RETURN NEW;
db_personal'> END;'
db_personal-> LANGUAGE 'plpgsql';
CREATE
Kemudian lanjutkan dengan pembuatan trigger yang berfungsi untuk memanggil fungsi secara otomatis ketika kita melakukan INSERT ataupun UPDATE pada tabel anggota.
db_personal=> CREATE TRIGGER tes1_trigger
db_personal-> BEFORE INSERT
db_personal-> ON anggota
db_personal-> FOR EACH ROW
db_personal-> EXECUTE PROCEDURE tes_trigger();
CREATE
cobalah INSERT beberapa data ke dalam tabel anggota:
db_personal=> INSERT INTO anggota (id, nama)
db_personal-> VALUES (26, 'andhie');
INSERT 70831 1
db_personal=> INSERT INTO anggota
db_personal-> VALUES (83, 'rWatia');
INSERT 70832 1
Tampilkan isi dari tabel anggota, hasilnya seperti pada tabel di bawah ini. Jadi setiap data yang kita INSERT walaupun dalam penulisannya menggunakan huruf kecil namun secara otomatis trigger akan memanggil fungsi yang bertugas untuk mengganti setiap data yang masuk agar hasilnya nanti selalu menjadi huruf besar:
db_personal=> SELECT * FROM anggota;
id | nama
--------+-------------
26 | ANDHIE
83 | RWATIA
(2 rows)
PRAKTIKUM
SOAL :
NO.1
KONFERSI SUHU
postgres

mysql

NO.2
FUNGSI CARI ALAMAT
postgres

mysql

NO.3
FUNGSI PENGHITUNGAN NILAI
postgres

mysql

NO.4
postgres

mysql

NO.5
postgres

mysq

SOAL :
KONFERSI SUHU
postgres

mysql

NO.2
FUNGSI CARI ALAMAT
postgres

mysql

NO.3
FUNGSI PENGHITUNGAN NILAI
postgres

mysql

NO.4
postgres


NO.5
postgres

mysq

KESIMPULAN
Dari hasil praktikum dapat disimpulka bahwa struktur query atau syntax dari penggunaan, penghapusan dan pembuatan fungsi sangat berbeda. Seperti jika pada postgres ketika kita ingin membuat fungsi maka langsung pada create fungction....... tetapi hal ini berbeda dengan mysql yang harus ada pendeklarasian delimiter $$ dan diakhiri dengan end $$. Kemudia pada
penghapusan fungsi jika pada postgres drop function nama_fungsi on nama_tabel; namun jika pada mysql drop function nama_fungsi;. Lalu pada postgres return setelah statement if, else, elsif di ikuti select into dan diikuti variabel yang di declare sebelumnya jika pada mysql return return dilakukan setelah if then retur, elsif return, else return lalu kemudian end if dan end.
Dari hasil praktikum dapat disimpulka bahwa struktur query atau syntax dari penggunaan, penghapusan dan pembuatan fungsi sangat berbeda. Seperti jika pada postgres ketika kita ingin membuat fungsi maka langsung pada create fungction....... tetapi hal ini berbeda dengan mysql yang harus ada pendeklarasian delimiter $$ dan diakhiri dengan end $$. Kemudia pada
penghapusan fungsi jika pada postgres drop function nama_fungsi on nama_tabel; namun jika pada mysql drop function nama_fungsi;. Lalu pada postgres return setelah statement if, else, elsif di ikuti select into dan diikuti variabel yang di declare sebelumnya jika pada mysql return return dilakukan setelah if then retur, elsif return, else return lalu kemudian end if dan end.
DAFTAR PUSTAKA
- https://www.academia.edu/7189587/MySQL
- https://gipculart.wordpress.com/2011/12/12/tutorial-fungsi-dan-trigger/
- Modul praktikum DBD BAB VIII.pdf
- http://uzi-online.blogspot.com/2009/08/definisi-plsql.html



SOCIALIZE IT →