A. LANDASAN TEORI

1.Pengertian
Fungsi SQL adalah sebuah kumpulan query, biasanya query yang detail dan panjang yang dibungkus menjadi satu dan disimpan dalam database dan kemudian apabila diperlukan hanya tinggal mengaksesnya tanpa mengetikan query detail. Sedangkan untuk memunculkan fungsi dapat menggunakan query \df. 
Ada beberapa faktor yang perlu diperhatikan dalam membuat fungsi antara lain:
• Nama Fungsi
• Nomor dari fungsi argument
• Tipe data dari setiap argument
• Tipe dari hasil fungsi
• Fungsi action
• Bahasa yang digunakan oleh fungsi action.

2. Fungsi PL/PGSQL
PL/SQL MySQL adalah bahasa prosedural yang digunakan untuk mengoptimalkan pembuatanaplikasi database yang menggunakan database MySQL. Kata PL pada PL/SQL merupakan singkatan dari Procedural Language.  
Keuntungan penggunaan Fungsi PL/PGSQL :
a). Meningkatkan kinerja karena mengurangi pengiriman kode dari klien ke server.
b). Meningkatkan keamanan karena pengaksesan data tertentu ditangani dalam server.
c). 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
- Berikut Struktur pembuatan fungsi dalam pl/pgsql
CREATE [OR REPLACE] FUNCTION nama_fungsi ( variabel_input tipe_data) 
RETURNS tipe_data 
AS ‘definisi’ 
LANGUAGE ‘plpgsql’;
2. Pembuatan definisi : 
DECLARE nama_variable tipe_data
BEGIN 
Return nama_variable 
 END; 
- Menghapus fungsi :
DROP FUNCTION nama_fungsi(paramater, parameter, parameter ... );
Contoh : DROP FUNCTION pembagian(text);
3. Triger
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. 
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.
Struktur Umum Triger :  
CREATE OR REPLACE TRIGGER nama_trigger
  (BEFORE | AFTER) statement ON nama
   FOR EACH ROW
   DECLARE
   variabel
   BEGIN
   queri
       END; 
Source : Musthafa, Aziz. Modul Praktikum Database 2014

B. TUGAS RUMAH


1. Membuat fungsi konversi suhu dari Fahrenheit ke derajat celcius dengan rumus konversi sebagai berikut : celcius= (5*(nilai Fahrenheit-32))/1,8
POSTGRE
Fungsi konversi di postgresql


MYSQL
Kalo di mysql, sintaks yang dituliskan berbeda dengan yang di postgre. Disini, saya menemukan dua cara dalam membuat fungsi konversi.



Yang kedua, pakai delimiter dengan sintaks body plsql lengkap dengan begin, declare dan end.






2.Buatlah fungsi untuk mencari alamat mahasiswa dari tabel mahasiswa berdasarkan nama mahasiswa. Kemudian jalankan dengan perintah SELECT !
POSTGRE
isi dari tabel mahasiswa

membuat fungsi cari_alamat pada postgresql

MYSQL
membuat fungsi cari_alamat pada mysql

3. Membuat fungsi untuk menghitung nilai dengan menggunakan bahasa pl/sql
POSTGRE
fungsi untuk mencari keterangan nilai di postgresql
MYSQL

fungsi untuk mencari keterangan nilai di mysql

4.Buatlah fungsi menggunakan pl/pgsql untuk mencari bilangan ganjil atau genap dari bilangan yang diinputkan. Kemudian jalankan dengan perintah SELECT.

Range
Keterangan
Nilai > 100 atau Nilai<0
Nilai Salah
Nilai ≥ 90
Nilai A
70 ≤ Nilai < 90
Nilai B
60 ≤ Nilai < 70
Nilai C
50 ≤ Nilai < 60
Nilai D
0 ≤ Nilai < 50
Nilai E

POSTGRE

fungsi untuk mencari bilangan genap atau ganjil di postgresql

MYSQL

fungsi mencari bilangan genap dan ganjil di mysql

5. Tambahkan kolom modifikasi pada tabel mahasiswa. Dimana setiap ada insert atau update maka tanggal pada kolom modifikasi akan menunjukkan tanggal perubahan tersebut dilakukan.
POSTGRE

menambah field modifikasi pada tabel mahasiswa
Di Postgresql, untuk membuat trigger, dibutuhkan fungsi terlebih dahulu. Sehingga, kita perlu membuat fungsi dulu, kemudian membuat triggernya

Membuat fungsi untuk trigger di PostgreSql


Membuat trigger di Postgresql
Fungsi syntax execute procedure digunakan untuk menjalankan fungsi yang telah dibuat pada trigger. Keudian, hasilnya akan muncul setelah kita menginsertkan data baru pada tabel mahasiswa.

Hasil dari data yang telah di insertkan
MYSQL

membuat tabel baru pada mysql
Membuat trigger pada mysql. Disini, kita langsung membuat trigger tanpa harus membuat fungsi seperti yang ada di postgresql.
membuat trigger pada mysql

C. PERBANDINGAN POSTGRESQL VS MYSQL

1. Beda dalam struktur umum pl/pgsql.
 a)POSTGRE : 
CREATE FUNCTION nama_fungsi (variabel_input, tipe_Data) 
RETURNS tipe_data
AS 'definisi'
language 'plpgsql; 
 b)MYSQL 
CREATE FUNCTION nama_fungsi (variabel_input, tipe_Data) 
RETURNS tipe_data
definisi 
2.Beda dalam pembentukan definisi
a) POSTGRE 
DECLARE variabel_output tipe_data 
BEGIN 
queri;
RETURN variabel_output 
END; 
b) MYSQL 
BEGIN 
DECLARE variabel_output; 
queri; 
RETURN variabel_output; 
END

3. Beda dalam penulisan string query select 
a) POSTGRE 
SELECT INTO variabel_hasil(operasi atau string); 
*string disini diapit oleh petik satu dua kali 
b) MYSQL 
SELECT (operasi atau string) INTO variabel_hasil;
*string disini diapit oleh petik dua

4.Beda dalam pembuatan triger
a) POSTGRE : pembuatan triger didahului dengan pembuatan fungsi 
b) MYSQL : tidak pake pembuatan fungsi terlebih dahulu

5. Tipe Data Opaque 
a) POSTGRE : pendeklarasian tipe data opaque untuk triger 
b) MYSQL : tidak memakai pendeklarasian tipe data opaque

6. Penggunaan Percabangan
a) POSTGRE : IF .... ELSIF.... END IF
b) MYSQL : IF.... ELSEIF.....END IF

7. Beda dalam penulisan panjang tipe data 
a) POSTGRE : tidak harus dituliskan panjang tipe data
b) MYSQL : harus dituliskan panjang tipe data


D. KESIMPULAN 

Dan akhirnya, kita dapat menyimpulkan dari hasil praktikum kali ini bahwa fungsi dalam sebuah DBMS sangat membantu kita dalam mengakses queri yang telah disimpan dalam fungsi tersebut. Jadi, kita hanya menuliskan satu kali queri saja. 
FungsiPL/PGSQL dalam DBMS MySql dan PostgreSQL berbeda penulisan syntaxnya. Demikian pula dalam pembuatan triger, dalam DBMS mysql dan postgre memiliki struktur yang berbeda.