Assalamu'alaikum, pada post kali ini, saya akan membahas tentang Fungsi, PL/SQL dan Trigger pada DBMS PostgreSQL dan MySQL.
A. Dasar Teori
A. Dasar Teori
1.
Fungsi
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 konsep yang menarik dari fungsi antara lain:
·
Bahasa yang dipakai dapat didefenisikan sendiri
dengan tersedianya parameter LANGUAGE, tanpa harus mengkompilasi ulang
PostgreSQL.
·
Kita
dapat membuat dua buah fungsi dengan nama yang sama namun parametermasukkannya
yang berbeda, baik tipe data maupun jumlahnya.
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.
Sedangkan
pada MySQL juga terdapat fungsi, yaitu Function dan Stored Procedure yang
merupakan fitur utama yang paling penting di MySQL 5. Function dan Stored
Procedure merupakan suatu kumpulan perintah atau statement yang disimpan dan
dieksekusi di server database MySQL. Dengan SP (Stored Procedure), kita dapat menyusun
program sederhana berbasis sintaks SQL untuk menjalankan fungsi tertentu.
Selanjutnya, Stored Procedure dari segi bentuk dan sifatnya terbagi menjadi 2
(dua), yaitu FUNCTION dan PROCEDURE. Perbedaan utama antara function dan
procedure adalah terletak pada nilai yang dikembalikannya (di-return). Function
memiliki suatu nilai yang dikembalikan (di-return), sedangkan procedure tidak.
Berikut
contoh sederhana pembuatan fungsi SQLpada PostgreSQL untuk perkalian dari tiga
inputan :
db_personal=>
CREATE FUNCTION perkalian (FLOAT, FLOAT, FLOAT)
db_personal->
RETURNS FLOAT
db_personal->
AS 'SELECT ($1 + $2) * $3;'
db_personal->
LANGUAGE 'sql';
CREATE
Dan berikut ini adalah perintah untuk memanggil
dan menggunakan fungsi yang telah kita buat di atas.
db_personal=>
SELECT perkalian (10,10,10);
perkalian
-----------
200
(1 row)
Dan
berikut ini adalah bentuk untuk fungsi dan store procedure untuk MySQL.
Procedure:
CREATE
[DEFINER
= { user | CURRENT_USER }]
PROCEDURE
sp_name ([proc_parameter[,...]])
[characteristic
...] routine_body
Fungsi:
CREATE
[DEFINER
= { user | CURRENT_USER }]
FUNCTION
sp_name ([func_parameter[,...]])
RETURNS type
[characteristic
...] routine_body
2.
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 :
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
a.
Pembuatan fungsi :
CREATE [OR REPLACE] FUNCTION nama_fungsi (
argtype , ... ])
RETURNS tipe_data
AS ‘definisi’
LANGUAGE ‘plpgsql’;
b.
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 ... );
Contoh :
DROP
FUNCTION pembagian(text);
Dalam PL/PGSQL kita juga dapat melakukan fungsi
seperti percabangan menggunakan if..else maupun perulangan menggunakan loop.
Kita juga dapat menggunakan fungsi-fungsi yang lain di PL/PGSQL. Perbedaan
dengan funsi yang pertam yaitu fungsi SQL, Pl/PGSQL ini biasanya menangani
fungsi yang lebih kompleks, sedangkan fungsi SQL hanya menangani fungsi yang
sederahana saja. Fungsi-fungsi tersebut juga dapat dilakukan di DBMS MMySQL
dengan query yang sedikit berbeda.
Berikut ini adalah contoh penggunaan PL/PGSQL
dalam fungsi yang digunakan untuk mencari nama pegawai berdasarkan id pegawai.
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
Dan berikut ini adalah perintah untuk memanggil
dan menggunakan fungsi yang telah kita buat di atas.
db_personal=>
SELECT pl_caripegawai (1);
pl_caripegawai
-----------------
Hendro
(1 row)
3.
Trigger
Trigger
digunakan untuk memanggil satu atau beberapa perintah SQL secara otomatis
sebelum atau sesudah terjadi proses INSERT, UPDATE atau DELETE dari suatu
tabel. Sebagai contoh misalnya kita ingin menyimpan id pelanggan secara
otomatis ke tabel ‘log’ sebelum menghapus data di tabel pelanggan.
Trigger
sering digunakan, antara lain untuk:
·
Melakukan
update data otomatis jika terjadi perubahan. Contohnya adalah dalam sistem
penjualan, jika dientri barang baru maka stock akan bertambah secara otomatis.
·
Trigger
dapat digunakan untuk mengimplementasikan suatu sistem log. Setiap terjadi
perubahan, secara otomatis akan menyimpan ke tabel log.
·
Trigger
dapat digunakan untuk melakukan validasi dan verifikasi data sebelum data
tersebut disimpan.
Dalam
PostgreSQL, 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
tersbut 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
B.
Hasil Pratikum.
Seperti
biasanya, saya akan mengerjakan soal praktikum 8 ini dengan menggunkan 2 DBMS
yaitu PostgreSQL dan MySQL. Berikut ini adalah soalnya.
1. Buatlah
fungsi konversi suhu dari Fahrenheit ke derajat celcius dengan rumus konversi
sebagai berikut : celcius= (5*(nilai Fahrenheit-32))/9! Kemudian jalankan hasilnya dengan menSELECT
fungsi tersebut !
2. Buatlah
fungsi untuk mencari alamat mahasiswa dari tabel mahasiswa berdasarkan nama
mahasiswa. Kemudian jalankan dengan perintah SELECT !
3. Buatlah
fungsi untuk menghitung nilai dengan menggunakan bahasa pl/sql !
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
Kemudian
jalankan hasilnya dengan menSELECT fungsi tersebut !
4.
Buatlah fungsi menggunakan pl/pgsql untuk
mencari bilangan ganjil atau genap dari bilangan yang diinputkan. Kemudian
jalankan dengan perintah SELECT !
5.
Tambahkan kolom modifikasi pada tabel
mahasiswa. Dimana setiap ada insert atau update maka tanggal pada kolom
modifikasi akan menunjukkan tanggal perubahan tersebut dilakukan.
1.
Menggunakan DBMS PostgreSQL (psql)
1.
Untuk
menjawab soal nomor 1, berikut ini adalah struktur query untuk memebuat fungsi
konversi suhu dari Fahrenheit ke celcius.
Setelah itu kita coba fungsi tersebut dengan memasukkan angka 32
Fahrenheit.
Sehingga diperoleh suhu dalam Celcius 0 derajat.
2.
Untuk
menjawab soal nomor 2, yaitu mencari alamat mahasiswa pada tabel mahasiswa
berdasarkan nama mahasiswa, kita menggunkan fungsi PL/PGSQL. Berikut ini adalah
struktur query nya,
Setelah itu, kita coba masukkan satu nama untuk mencari alamat dari
mahasiswa tersebut. Misalnya rizki, seperti di bawah ini.
Sehingga akan muncul alamat dari mahasiswa tersebut yaitu Kediri.
3.
Untuk
menjawab soal nomor3, yaitu menentukan nilai, kita akan menggunakan fungsi
pl/sql percabangan menggunakan if…else. Berikut ini adalah struktur query nya.
Kemudian kita coba masukkan nilai 99.
Sehingga, hasilnya akan sesuai dengan tabel, yaitu mendapat nilai A
untuk nilai lebih dari 90 sampai 100.
4.
Untuk
soal nomor 4, dalam menentukan bilangan ganjil atau genap, kita juga akan
menggunakan fungsi pl/sql percabangan. Jika bilangan tersebut di modulus 2
hasilnya 0, maka bilangan itu genap. Jika tidak, maka bilangan itu ganji.
Berikut ini adalah struktur query nya.
Setelah itu, kita coba masukkan angka 10
Sehingga hasilnya, angka 10 adalah bilangan genap.
5.
Untuk
soal nomor 5, yaitu menambahkan tanggal secara otomatis pada kolom modifikasi jika
ada insert atau update pada tabel mahasiswa.
Pertama, kita buat dulu kolom mahasiswa di tabel mahasiswa. Berikut
ini struktur query nya.
Lalu, kita buat dulu fungsinya dengan nama fungsi modifikasi.
Kemudian, kita buat trigger yang akan mengeksekusi fungsi modifikasi tersebut
pada saat insert atau update dilakukan pada tabel mahasiswa. Berikut ini
struktur query nya.
Lalu kita coba insert data mahasiswa baru pada tabel mahasiswa.
Sehingga pada kolom modifikasi akan otomatis terisi tanggal saat
inert dilakukan.
2.
Menggunakan DBMS MySQL (Xampp Shell)
Untuk
fungsi di MySQL, kita harus tentukan delimeternya dulu. Delimiter adalah
karakter atau string yang digunakan untuk menyatakan akhir SQL statement,
default delimiter pada MySQL adalah semicolon (;). Pada praktikum
kali ini saya akan menggunakan delimiter //. Perubahan delimiter ini
menggunakan query sebagai berikut.
Untuk
mengembalikan delimiter ke default lagi, kiata tinggal mengetikkan query
seperti di bawah ini.
1.
Untuk
menjawab soal nomor 1, berikut ini adalah struktur query untuk memebuat fungsi
konversi suhu dari Fahrenheit ke celcius.
Setelah itu kita coba fungsi tersebut dengan memasukkan angka 32
Fahrenheit.
Sehingga diperoleh suhu dalam Celcius 0 derajat.
2.
Untuk
menjawab soal nomor 2, yaitu mencari alamat mahasiswa pada tabel mahasisw
aberdasarkan nama mahasiswa. Berikut ini adalah struktur query nya,
Setelah itu, kita coba masukkan satu nama untuk mencari alamat dari
mahasiswa tersebut. Misalnya rizki, seperti di bawah ini.
Sehingga akan muncul alamat dari mahasiswa tersebut yaitu Kediri.
3.
Untuk
menjawab soal nomor3, yaitu menentukan nilai, kita akan menggunakan fungsi
percabangan menggunakan if…else. Berikut ini adalah struktur query nya.
Kemudian kita coba masukkan nilai 99.
Sehingga, hasilnya akan sesuai dengan tabel, yaitu mendapat nilai A
untuk nilai lebih dari 90 sampai 100.
4.
Untuk
soal nomor 4, dalam menentukan bilangan ganjil atau genap, kita juga akan
menggunakan fungsi pl/sql percabangan. Jika bilangan tersebut di modulus 2
hasilnya 0, maka bilangan itu genap. Jika tidak, maka bilangan itu ganji.
Berikut ini adalah struktur query nya.
Setelah itu, kita coba masukkan angka 10
Sehingga hasilnya, angka 10 adalah bilangan genap.
5.
Untuk
soal nomor 5, yaitu menambahkan tanggal secara otomatis pada kolom modifikasi
jika ada insert atau update pada tabel mahasiswa.
Pertama, kita buat dulu kolom mahasiswa di tabel mahasiswa. Berikut
ini struktur query nya. sebelumnya, saya kembalikan delimiternya ke default.
Kemudian kita buat trigger jika insert dilakukan pada tabel
mahasiswa dengan nama trigger modifikasi. Berikut ini adalah struktur query
nya.
Lalu kita buat trigger jika update dilakukan pada tabel mahasiswa
dengan nama trigger modifikasi2. Berikut ini adalah struktur query nya.
Selanjutnya, kita coba insert data mahasiswa baru pada tabel
mahasiswa seperti di bawah ini.
Sehingga ketika kita lihat tabelnya, kolom modifikasi akan secara
otomatis terisi tanggal pada saat insert dilakukan.
Kemudian kita coba update salah satu data
mahasiswa pada tabel mahasiswa, misalnya kita akan mengubah alamat mahasiswa dengan nim 21 dengan
solo seperti di bawah ini.
Sehingga ketika kita lihat tabelnya, kolom modifikasi akan secara
otomatis terisi tanggal pada saat update dilakukan.
C. Evaluasi Perbandingan MySQL dan PostgreSQL
- Pada PostgreSQL kita tidak perlu menggunakan delimiter, tetapi menggunakan language'sql'; atau language 'pl/pgsql'; di akhir fungsi yang kita buat, sedangkan pada MySQL, kita menggunakan delimiter, pada praktikum kali ini saya menggunakan delimiter//.
- Pada PostgreSQL declare terletak sebelum begin, sedangkan pada MySQL declare terletak setelah begin.
- Pada PostgreSQL, kiata menggunakan tanda ' dua kali untuk mengapit bentuk String seperti pada soal nomor 3 (''Nilai Salah''). Sedangkan pada MySQL, kita menggunakan tanda petik " ("Nilai Salah").
- Pada PostgreSQL, kita menggunakan tipe data opaque sebagai tipe data kusus pada Trigger di PostgreSQL, sedangkan MySQL tidak,
- Pada PostgreSQL, kita dapat membuat fungsinya dulu, lalu dapat dieksekusi pada Trigger yang akan dibuat, sedangkan MySQL tidak.
- Pada PostgreSQL, kita dapat mengabungkan event yang berbeda dalam waktu sama pada satu Trigger, mislanya pada nomor 5 (before insert or update), sedangkan pada MySQL kita harus membuat 2 trigger untuk 2 event yang berbeda. Sehingga ada trigger modifikasi (before insert) dan trigger modifikasi2 (before update).
D. Kesimpulan, Kritik, Saran dan Manfaat
- Kesimpulan
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. Fungsi terdapat pada DBMS PostgreSQL maupun MySQL.
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.
Sedangkan Trigger
digunakan untuk memanggil satu atau beberapa perintah SQL secara otomatis
sebelum atau sesudah terjadi proses INSERT, UPDATE atau DELETE dari suatu
tabel.
2. Kritik
2. Kritik
Dalam laporan ini, masih banyak terdapat kekurangan karena
terbatasnya pengetahuan saya dalam menguasai 2 DBMS yang digunakan dalam
praktikum ini
3. Saran
Diperlukan pembelajaran
lebih lanjut mengenai Fungsi, PL/PGSQL dan Trigger dalam database menggunakan PostgreSQL maupu
MySQL agar praktikan dapat menguasai kedua DBMS tersebut dalam membuat database
yang lebih baik.
Manfaat yang
akan didapat pembaca dalam laporan ini antara lain dapat mengetahui struktur
query dalam pembuatan Fungsi pada kedua DBMS. Pembaca juga dapat mengetahui struktur pembuatan PL/PGSQL dan Trigg. Pembaca juga dapat mengetahui
persamaan dan perbedaan dari kedua DBMS tersebut.
0 komentar:
Posting Komentar