Rabu, 26 November 2014

Laporan Praktikum 8 : FUNGSI, PL/PGSQL dan TRIGER



A. Landasan Teori
1.   Pendukung Fungsi
          PostgreSQL memiliki fungsi yang dapat mengubah suatu nilai dalam suatu kolom atau baris menjadi huruf besar. Fungsi tersebut bernama upper(nama_kolom), berfungsi memanggil fungsi  upper  dengan nama_kolom  sebagai argumen sehingga menghasilkan nilai pada kolom dalam huruf besar.

2.  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
3.  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. 
- 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 ... );
 

4. 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.

B.  Hasil Praktikum

  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 ! 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 PostgreSQL
 1.1 Langkah pertama membuat fungsi untuk mengkonversi suhu dari fahrenheit ke celcius menggunakan perintah

   CREATE FUNCTION konversi(FLOAT)
   RETUNRS FLOAT
   AS ‘SELECT (($1 – 32)/1.8);’
   LANGUAGE ‘sql’;
Setelah membuat fungsi, cek dengan menggunakan perintah
   SELECT konversi(27);



1.2 Selanjutnya membuat fungsi lagi tetapi untuk mencari alamat mahasiswa melalui nama mahasiswa menggunakan perintah


   CREATE FUNCTION alamat_mh(nama VARCHAR)
   RETUNRS VARCHAR
   AS ‘SELECT alamat_mah FROM mahasiswa;’
   LANGUAGE ‘sql’;
Setelah membuat fungsi, cek dengan menggunakan perintah
   SELECT alamat_mh(‘putri’);


1.3 Kemudian membuat fungsi untuk menghitung nilai menggunakan perintah 

  CREATE FUNCTION hitung (INTEGER)
  RETURNS text
  AS 'DECLARE hasil text;
  BEGIN
  CASE
  WHEN $1>100 AND $1<0 THEN SELECT INTO hasil (''NILAI SALAH'');
  WHEN $1>=90 THEN SELECT INTO hasil (''NILAI A'');
  WHEN $1>=70 AND $1<90 THEN SELECT INTO hasil (''NILAI B'');
  WHEN $1>=60 AND $1<70 THEN SELECT INTO hasil (''NILAI C'');
  WHEN $1>=50 AND $1<60 THEN SELECT INTO hasil (''NILAI D'');
  WHEN $1>=0 AND $1<50 THEN SELECT INTO hasil (''NILAI E'');
  END CASE;
  RETURN hasil;
  END;'
  LANGUAGE 'plpgsql';
  Setelah membuat fungsi cek dengan menggunakan perintah
 SELECT hitung (95);



1.4 Lalu membuat fungsi mencari nilai ganjil genap menggunakan perintah

   CREATE FUNCTION ganjil_genap (INTEGER)
   RETURNS text
   AS 'DECLARE hasil text;
   BEGIN
   CASE
   WHEN $1%2=0 THEN SELECT INTO hasil (''Genap'');
   ELSE
   SELECT INTO hasil (''Ganjil'');
   END CASE;
   RETURN hasil;
   END;'
   LANGUAGE 'plpgsql';
  Setelah membuat fungsi, cek dengan menggunakan perintah
 SELECT ganjil_genap (9);


1.5 Kemudian sebelum membuat trigger kita harus menambahan kolom pada tabel mahasiswa dahulu menggunakan perintah
         ALTER TABLE mahasiswa ADD COLUMN modifikasi DATE;
setelah berhasil menambahkan kolom, lanjutkan dengan membuat fungsi menggunakan perintah

   CREATE FUNCTION modifikasi()
   RETURNS OPAQUE
   AS 'BEGIN new.nama := curent_date;
   RETURN NEW;
   END;'
   LANGUAGE 'plpgsql';
 Kemudian buat fungsi trigger menggunakan perintah

   CREATE TRIGGER modifikasi BEFORE INSERT OR UPDATE ON mahasiswa FOR EACH ROW  EXECUTE PROCEDURE modifikasi();
 Setelah berhasil, cek dengan memasukkan data baru ke tabel mahasiswa dengan perintah
INSERT INTO MAHASISWA values (20, 'besari’, ’tangerang’, ’121314’, ’L’, 1);
kemudian lihat menggunakan perintah
SELECT*FROM mahasiswa;



2. Menggunakan MySQL
2.1 Pada MySQL perintah yang digunakan berbeda, yakni menentukan delimiter dengan menggunakan tanda "// ". Lalu membuat fungsi yang sedikit berbeda dengan postgre dengan perintah
CREATE FUNCTION konversi_suhu2 
($1 FLOAT) RETURNS
FLOAT RETURN (($1-32)/1.8); 
// 
 Setelah membuat fungsi, cek dengan menggunakan perintah
select konversi_suhu2(20);
//

2.2  Selanjutnya membuat fungsi lagi tetapi untuk mencari alamat mahasiswa melalui nama mahasiswa menggunakan perintah
CREATE FUNCTION alamat02 (nama VARCHAR(27)); 
RETURNS VARCHAR(27) 
BEGIN
DECLARE hasil VARCHAR(20); 
SELECT alamat_mah INTO hasil FROM mahasiswa WHERE nama_mah=nama; RETURN hasil; 
END;
// 
Kemudian coba gunakan fungsi yang telah dibuat 
SELECT alamat02 (‘fiersa’);
//


2.3 Kemudian membuat fungsi untuk menghitung nilai menggunakan perintah 
  CREATE FUNCTION hitungnilai (nilai INTEGER)
  RETURNS VARCHAR(27)
  AS 'DECLARE hasil text;
  BEGIN
  DECLARE hasil VARCHAR(27);
  IF nilai>100 OR nilai<0 THEN SELECT "NILAI SALAH" INTO hasil;
  ELSEIF nilai>=90 THEN SELECT INTO hasil "NILAI A";
  ELSEIF nilai>=70 OR nilai<90 THEN SELECT "NILAI B" INTO hasil;
  ELSEIF nilai>=60 OR nilai<70 THEN SELECT "NILAI C" INTO hasil;
  ELSEIF nilai>=50 OR nilai<60 THEN SELECT "NILAI D" INTO hasil ;
  ELSE SELECT "NILAI E" INTO hasil;
  END IF;
  RETURN hasil;
  END;
  //
  Setelah membuat fungsi cek dengan menggunakan perintah
 SELECT hitungnilai (72);
//


2.4 Lalu membuat fungsi mencari nilai ganjil genap menggunakan perintah
   CREATE FUNCTION ganjilgenap (nilai INTEGER)
   RETURNS VARCHAR(27)
   BEGIN
   DECLARE hasil VARCHAR(27);
   IF nilai%2=0 THEN SELECT "Genap" INTO hasil;
   ELSE SELECT "Ganjil" INTO hasil;
   END IF;
   RETURN hasil;
   END;
   //
  Setelah membuat fungsi, cek dengan menggunakan perintah
 SELECT ganjilgenap (27);
//


2.5 Kemudian sebelum membuat trigger kita harus menambahan kolom pada tabel mahasiswa dahulu menggunakan perintah         
ALTER TABLE mahasiswa ADD COLUMN modifikasi DATE;

setelah berhasil menambahkan kolom, lanjutkan dengan membuat fungsi trigger menggunakan perintah
CREATE TRIGGER modifikasi1 
BEFORE UPDATE ON mahasiswa FOR EACH ROW
BEGIN 
SET new.modifikasi=SYSDATE(); END
//
CREATE TRIGGER modifikasi2 
BEFORE UPDATE ON mahasiswa FOR EACH ROW
BEGIN 
SET new.modifikasi=SYSDATE(); 
END; 
//
 
 Setelah berhasil, cek dengan memasukkan data baru ke tabel mahasiswa dengan perintah
INSERT INTO mahasiswa (nim_mah, nama_mah, alamat, no_telp, id_fak, gender_mah) VALUES (22, 'fahreza’, ’jepara’, ’034110111’,5, ’L’);//

kemudian lihat menggunakan perintah
SELECT*FROM mahasiswa;
//

C. Kesimpulan, Kritik dan Saran

      Dari percobaan pada kedua DBMS diatas bisa disimpulkan banyak sekali perbedaan antara keduanya yang bisa dilihat dari perintah yang digunakan dari awal sampai akhir yang hanya memiliki sedikit persamaan. Misalkan pada MySQL menggunakan delimiter yang tujuannya agar pada saat pembuatan prosedur tidak terganggu. Karena secara default MySQL menggunakan titik-koma sebagai delimiter dan pada pemograman procedural MySQL menggunakan titik-koma juga maka diperlukan delimiter lain selain titik-koma. Perlu diketahui delimiter adalah suatu tanda yang menyebabkan mesin MySQL mengeksekusi sql yang kita inputkan. Sedangkan pada PostgreSQL tidak. Lalu penggunaan bahasa PL/PGSQL pada PostgreSQL
         Karena tidak ada yang sempurna, maka jika ada kurang bahkan salah pada penulisan diharapkan memberikan komentar dibawah :) Terima kasih atas kunjungan pembaca dan jangan lupa selalu mencoba, mencoba dan mencoba!

D. Referensi

Modul Praktikum DBD 2014.pdf
Unknown Web Developer