Sabtu, 22 November 2014

Hay hay.. Laporan Praktikum Desain Basis Data kali ini bakalan ngebahas tentang fungsi, pl/pgsql dan trigger Sob. Langsung.. cekidot :D

Dasar Teori

Fungsi (function)
Fungsi adalah suatu bagian dari program yang dipergunakan untuk mengerjakan suatu tugas tertentu yang menghasilkan suatu nilai untuk dikembalikan ke program pemanggil dan letaknya dipisahkan dari bagian program yang menggunakannya.
Manfaat fungsi:
  • Menghindari pengulangan; tujuannya untuk menghindari penulisan bagian kode program berulang-ulang.
  • Penataan program; program yang besar dan komplek dibagi-bagi menjadi aktivitas yang berbeda dan ditempatkan dalam subrutine yang terpisah, sehingga setiap aktivitas bisa ditulis dan diperiksa secara mandiri
  • Kemandirian; mempunyai variabel “private” yaitu variabel yang tidak bisa diakses program pemanggil atau subrutin lain.
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.

Fungsi PL/PGSQL
PL/pgSQL adalah procedural language yang loadable (dapat langsung digunakan tanpa restart server) pada sistem database PostgreSQL. PL/pgSQL didesain dengan tujuan supaya kita dapat membuat sebuah procedural language yang:
dapat dipakai untuk membuat function atau trigger
dapat menambahkan sruktur kontrol pada bahasa SQL
dapat melakukan komputasi kompleks
semua type, function, dan operator yang didefinisikan user (buatan kita sendiri atau orang lain) dapat diturunkan (inherit)
dapat dipercaya oleh server
mudah digunakan
Function yang telah kita buat menggunakan PL/pgSQL dapat digunakan sebagaimana function bawaan yang sudah ada di server database PostgreSQL. Misalnya, kita dapat membuat fungsi komputasi kondisional yang kompleks menggunakan PL/pgSQL, kemudian menggunakannya untuk membuat operator atau menggunakannya untuk membuat index di server database PostgrSQL.
Berikut Struktur pembuatan fungsi dalam pl/pgsql
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 ... );
Contoh :
DROP FUNCTION pembagian(text);

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.


Hasil Praktikum

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 !



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



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 !



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

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


Ini nih, hasil praktikum yang pake PosgreSQL:
Server [localhost]:
Database [postgres]:
Port [5432]:
Username [postgres]:
Password for user postgres:
psql (9.3.5)
WARNING: Console code page (437) differs from Windows code page (1252)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.
Type "help" for help.

postgres=# \c permata13650083
WARNING: Console code page (437) differs from Windows code page (1252)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.
You are now connected to database "permata13650083" as user "postgres".

permata13650083=# create function konversi(float)
permata13650083-# returns float
permata13650083-# as 'select (($1-32)/1.8);'
permata13650083-# language 'sql';
CREATE FUNCTION
permata13650083=# select konversi(120);
     konversi
------------------
 48.8888888888889
(1 row)


permata13650083=# select* from mahasiswa;
 nim_mah |     nama_mah      | alamat_mah |  notelp_mah  | id_fak | gender
---------+-------------------+------------+--------------+--------+--------
      14 | Luki              | Ponorogo   | 085655084275 |      2 | L
      15 | Affan             | Surabaya   | 085234589012 |      1 | L
      16 | Melly             | Yogyakarta | 085734558902 |      1 | P
      18 | Sinta             | Jakarta    | 081233655789 |      1 | P
      21 | Ana               | Malang     | 081233655789 |      2 | P
      23 | Fandi             | Jombang    | 081245765889 |      1 | L
      17 | Hari              | Solo       | 085730008902 |      2 |
      30 | Randi             | Malang     | 085655084275 |      4 | L
      31 | Riko              | Malang     | 085655084275 |      3 | L
      37 |  Andi Cahyono++++ | Jambi      | 085655084275 |      4 | L
(10 rows)


permata13650083=# create function cari_alamat(varchar)
permata13650083-# returns varchar
permata13650083-# as 'select alamat_mah from mahasiswa where nama_mah=($1);'
permata13650083-# language 'sql';
CREATE FUNCTION
permata13650083=# select cari_alamat('Sinta');
 cari_alamat
-------------
 Jakarta
(1 row)


permata13650083=# create or replace function hitung (x integer)
permata13650083-# returns varchar(30)
permata13650083-# as 'declare nilai varchar(30);
permata13650083'# begin
permata13650083'# if x>100 or x<0 then
permata13650083'# select into nilai ''nilai salah'';
permata13650083'# elsif x>=90 then
permata13650083'# select into nilai ''nilai A'';
permata13650083'# elsif x>=70 and x<90 then
permata13650083'# select into nilai ''nilai B'';
permata13650083'# elsif x>=60 and x<70 then
permata13650083'# select into nilai ''nilai C'';
permata13650083'# elsif x>=50 and x<60 then
permata13650083'# select into nilai ''nilai D'';
permata13650083'# elsif x>=0 and x<50 then
permata13650083'# select into nilai ''nilai E'';
permata13650083'# end if;
permata13650083'# return nilai;
permata13650083'# end;'
permata13650083-# language 'plpgsql';
CREATE FUNCTION
permata13650083=# select hitung(-20);
   hitung
-------------
 nilai salah
(1 row)


permata13650083=# select hitung(85);
 hitung
---------
 nilai B
(1 row)


permata13650083=# select hitung(120);
   hitung
-------------
 nilai salah
(1 row)


permata13650083=# create or replace function cek_bilangan (x integer)
permata13650083-# returns varchar(30)
permata13650083-# as 'declare hasil varchar(30);
permata13650083'# begin
permata13650083'# if x%2=0 then
permata13650083'# select into hasil ''genap'';
permata13650083'# else
permata13650083'# select into hasil ''ganjil'';
permata13650083'# end if;
permata13650083'# return hasil;
permata13650083'# end;'
permata13650083-# language 'plpgsql';
CREATE FUNCTION
permata13650083=# select cek_bilangan(7);
 cek_bilangan
--------------
 ganjil
(1 row)


permata13650083=# select cek_bilangan(12);
 cek_bilangan
--------------
 genap
(1 row)

permata13650083=# create or replace function tes_trigger()
permata13650083-# returns opaque
permata13650083-# as 'begin
permata13650083'# new.modifikasi := current_date;
permata13650083'# return new;
permata13650083'# end;'
permata13650083-# language 'plpgsql';
CREATE FUNCTION
permata13650083=# create trigger tes1_trigger
permata13650083-# before insert
permata13650083-# on mahasiswa
permata13650083-# for each row
permata13650083-# execute procedure tes_trigger();
WARNING:  changing return type of function tes_trigger from "opaque" to "trigger"
CREATE TRIGGER
permata13650083=# insert into mahasiswa values (32, 'Raka', 'Manado', '0866576585', 1, 'L');
INSERT 0 1
permata13650083=# select*from mahasiswa;
 nim_mah |     nama_mah      | alamat_mah |  notelp_mah  | id_fak | gender | modifikasi
---------+-------------------+------------+--------------+--------+--------+------------
      14 | Luki              | Ponorogo   | 085655084275 |      2 | L      |
      15 | Affan             | Surabaya   | 085234589012 |      1 | L      |
      16 | Melly             | Yogyakarta | 085734558902 |      1 | P      |
      18 | Sinta             | Jakarta    | 081233655789 |      1 | P      |
      21 | Ana               | Malang     | 081233655789 |      2 | P      |
      23 | Fandi             | Jombang    | 081245765889 |      1 | L      |
      17 | Hari              | Solo       | 085730008902 |      2 |        |
      30 | Randi             | Malang     | 085655084275 |      4 | L      |
      31 | Riko              | Malang     | 085655084275 |      3 | L      |
      37 |  Andi Cahyono++++ | Jambi      | 085655084275 |      4 | L      |
      32 | Raka              | Manado     | 0866576585   |      1 | L      | 2014-11-21
(11 rows)


permata13650083=#

Evaluasi Perbedaan DBMS MySQL dan PostgreSQL 
Dari hasil praktikum diatas, sebenarnya dari struktur umum fungsi pl/pgsql antara PostgreSQL dan MySQL sudah berbeda. Pada MySQL, pembuatan fungsi diawali dengan “delimiter”, kemudian pada PostgreSQL disertai dengan jenis bahasa yang dipakai (sql/plpgsql) sedangkan pada MySQL tidak. Pada PostgreSQL, penggunaan “else if” ditulis dengan “elsif”, dan pada MySQL menggunakan “elseif”. 

Kesimpulan 
Dari praktikum kali ini dapat disimpulkan bahwa:
Fungsi (function) adalah suatu bagian dari program yang dipergunakan untuk mengerjakan suatu tugas tertentu yang menghasilkan suatu nilai untuk dikembalikan ke program pemanggil dan letaknya dipisahkan dari bagian program yang menggunakannya.
Beberapa faktor yang perlu diperhatikan dalam membuat fungsi: nama fungsi, nomor dari fungsi argument, tipe data dari setiap argument, tipe dari hasil fungsi,fungsi actio, dan bahasa yang digunakan oleh fungsi action.
PL/pgSQL adalah procedural language yang loadable (dapat langsung digunakan tanpa restart server) pada sistem database PostgreSQL.
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 ... );
Contoh :
DROP FUNCTION pembagian(text);
Trigger digunakan untuk menyisipkan sebuah fungsi pada saat suatu record di INSERT, UPDATE dan DELETE. 

Okey, sekian dulu yaa laporan praktikum kali ini, semoga Sobat semua dapat mengambil manfaat pada postingan ini. Silahkan coment" kasih saran juga Sob.
 

Referensi


http://gipculart.wordpress.com/2011/12/12/tutorial-fungsi-dan-trigger/
Modul Praktikum Desain Basis Data



0 komentar:

Posting Komentar

Teman

Popular Posts

Text Widget