Praktikum
Desain Basis data 8
Fungsi,
Pl/Pgsql dan Trigger
SQL
Shell Vs CMD mysql Pada XAMPP
Landasan Teori
SQL
Structured query
language (SQL) merupakan bahasa untuk berkomunikasi dengan database
relasional yang bersifat deklaratif
(bukan prosedural) dengan menyatakn hasil (bukan cara memperoleh hasil ).
Untuk kecepatan akses, SQL
melalui database engine akan menentuakn cara
tercepat memproses data, karena itu user tidak perlu menetukan bagaimana
cara mengambil data. Jadi SQL merupakan bahasa
yang deklaratif tau
fungsional karena user
hanya menjelaskan data
yang diinginkan. Berbeda dengan
bahasa procedural pascal
atau C yang
akan melinbatkan proses
seperti melakukan
pengulangan sampai akhir
tabel atau kondisi
kota terpenuhi, melakukan perbandingan kondisi kota yang dicari maupun pengurutan
nama.
Statement SQL dapat dikelompokkan atas ;
• Data
Manipulation Language. Statemen yang digunakan untuk memanipulasi data dalam
objek
schema melalui perintah select, insert, update,
delete, explain plan, dan lock table.
• Data Definition
Language. Statement untuk
membuat dan menghapus
objek schema mealui
perintah create, alter, drop, rename, truncate,
serta grant, revoke, analyze, comment, audit, dan
noaudit.
• Statement
Kontrol Transaksi yang
emastiakn transaksi berlangsung
secara normal untuk
konsistensi data, contohnya perintah commit,
rollback, savepoint, dan set transaction.
•
Statement control Session
yang mengatur agar
suatu session memiliki
karakteristik tertentu
dengan perintah alter sesion dan set role.
• Statement
control system yang mengelola instance database memalui perintah alter sytem
Struktur PL/SQL
Semua program PL/SQL harus mengikuti struktur
pemrograman sebagai berikut :
-
Bagian Judul (Header)
Bagian ini hanya digunakan jika PL/SQL diberikan
nama, misalnya untuk prosedur atau
fungsi. Bagian ini berisi nama blok, daftar
parameter, dan pengembalian hasil (Retrun) jika
blok adalah fungsi.
-
Bagian Deklarasi (Declaration)
Bagian ini
untuk membuat deklarasi
mengenai semua variable
dan konstanta yang
direferensikan
dalam pernyataan PL/SQL.
Bagian deklarasi ini
dimulai dengan perinyah
DECLARE. Jika tidak ada variable atau konstanta
yang ingin dideklarasikan, bagian ini boleh
dihilangkan.
-
Bagian Eksekusi (Execution)
Bagian ini
memuat pernyataan-pernyataan PL/SQL yang akan ditulis. Bagian eksekusi ini
harus dimulai dengan perintah BEGIN.
-
Bagian Perkecualian
(Exception)
Bagian ini
memuat cara menangani
kesalahan-kesalahan (error) pada
waktu eksekusi
program PL/SQL. Jika program tidak memuat cara
menangani kesalahan, bagian ini boleh
dihilangkan.
Setiap pernyataan PL/SQL harus
diakhiri dengan tanda titik-koma (;) dan semua program PL/SQL
harus diakhiri dengan perintah END.
Oracle menyediakan dua cara untuk mengakses
data-data yang dihasilkan oleh PL/SQL,
yaitu :
• Dengan
menggunakan paket DBMS_OUTPUT
Paket
DBMS_OUTPUT ini disediakan
oleh oracle untuk
digunakan dengan SQL*PLUS.
Paket
ini terdiri atas
sejumlah prosedur dan
fungsi siap pakai
yang mengatur
intput/output suatu data untuk digunakan oleh
PL/SQL.
• Dengan
menggunakan Tabel PL/SQL
Struktur fungsi
SQL
CREATE [OR REPLACE FUNCTION] nama_fungsi
[(parameter_1
tipedata, parameter_2 tipedata, ....)]
RETURN tipedata_fungsi IS
variabel-variabel_lokal
BEGIN
statement;
.
. . .
RETURN
nilai_fungsi;
END;
Membuat fungsi SQL dengan POSTGRESQL
PostgreSQL mendukung variasi
SQL99 perintah CREATE FUNCTION. Hal ini tidak secara langsung kompatibel dengan
standar, tapi itu tidak memungkinkan untuk berbagai cara untuk memperpanjang
PostgreSQL dengan menciptakan fungsi disesuaikan sendiri.
Berikut adalah sintaks untuk CREATE FUNCTION:
CREATE FUNCTION name ( [ argumenttype [, ...] ] )
RETURNS returntype
AS 'definition'
LANGUAGE 'SQL'
End;
penjelasannya sebagai berikut :
-CREATE FUNCTION name ( [ argumenttype [, ...] ] )
Nama adalah nama fungsi baru yang akan dibuat.
Ekspresi argumenttype sambil lalu dikelompokkan mendefinisikan tipe data dari
argumen bahwa fungsi memerlukan saat dipanggil, dipisahkan dengan koma.
Meninggalkan ungkapan ini hasil kosong dalam fungsi yang tidak menerima argumen
(meskipun kurung masih diperlukan di kedua definisi dan penggunaan).
-RETURNS returntype
ReturnType adalah tipe data tunggal dari nilai yang
dikembalikan oleh fungsi.
-AS 'definition'
Definisi adalah definisi program dari fungsi itu
sendiri. Untuk bahasa prosedural, seperti PL / pgsql, ini adalah kode literal
digunakan untuk mendefinisikan fungsi. Untuk fungsi C dikompilasi, ini adalah
sistem jalan mutlak untuk link file yang berisi kode objek.
-LANGUAGE 'SQL'
languagename adalah nama dari bahasa yang fungsi
ini ditulis dalam. bahasa mungkin bahasa prosedural didukung (seperti plpgsql,
atau plperl, asumsi itu telah ditambahkan ke database), C, atau SQL.
Paling sederhana jenis fungsi
untuk menambah PostgreSQL adalah fungsi SQL murni, karena tidak memerlukan
pengetahuan pemrograman eksternal atau pengalaman. Fungsi SQL hanya
didefinisikan sebagai pernyataan SQL standar dengan dukungan untuk argumen
inline lulus sebagai parameter posisi.
Parameter posisi adalah
referensi yang digunakan dalam definisi fungsi SQL untuk salah satu argumen
panggilan. Hal ini disebut posisi karena direferensikan oleh urutan argumen
dilewatkan ke fungsi. Sintaks parameter posisional adalah tanda dolar diikuti
dengan nomor (misalnya, $ 1). Jumlah tersebut merupakan posisi memerintahkan
dalam argumen dilewatkan ke fungsi, dimulai dengan 1.
PL / pgsql
PL/PGSQL merupakan bahasa yang
lain untuk membuat sebuah fungsi, biasanya bahasa ini
digunakan untuk menangani
fungsi yang lebih
kompleks.
PL / pgsql ( Bahasa Prosedural / PostgreSQL) adalah
bahasa prosedural pemrograman yang
didukung oleh PostgreSQL ORDBMS . Ini mirip bahasa PL / SQL Oracle. Dengan
PostgreSQL v9.x beberapa ISO SQL / PSM fitur, seperti overloading fungsi dan prosedur SQL-dipanggil yang
didukung.
PL / pgsql, sebagai bahasa
pemrograman fitur lengkap, memungkinkan lebih banyak kontrol prosedural
daripada SQL , termasuk kemampuan untuk menggunakan loop dan struktur kontrol
lainnya. Fungsi dibuat dalam bahasa PL / pgsql dapat dipanggil dari pernyataan
SQL, atau sebagai tindakan bahwa trigger melakukan. PL / pgsql diciptakan untuk
dapat melakukan operasi yang lebih kompleks dan perhitungan dari SQL, sementara
mudah digunakan, dan dapat didefinisikan sebagai dipercaya oleh server. PL /
pgsql adalah satu-satunya bahasa pemrograman terinstal secara default untuk
PostgreSQL, tapi banyak orang lain yang tersedia, termasuk PL / Java , PL /
Perl , PL / php , PL / Python , PL / R , PL / Ruby , PL / sh , PL / Tcl , dan
PL / Lua . PostgreSQL menggunakan Bison di tiap tahap sehingga mudah untuk port
yang banyak open source bahasa, serta penggunaan kembali kode.
TRIGGER
Sejauh ini, semua fungsi yang
didefinisikan dalam bab ini telah disebut secara eksplisit, baik dengan
menggunakan fungsi SELECT () perintah atau dengan menggunakan fungsi dalam
ekspresi. Anda juga dapat menghubungi tertentu fungsi PL / pgsql otomatis.
Sebuah trigger adalah fungsi yang disebut setiap kali acara tertentu terjadi
pada tabel tertentu. Perintah INSERT, UPDATE perintah, atau perintah DELETE
dapat menyebabkan trigger untuk mengeksekusi. Trigger digunakan
untuk menyisipkan sebuah
fungsi pada saat
suatu record di-INSERT,
UPDATE dan DELETE.
Sintaks penuh untuk perintah CREATE TRIGGER adalah
:
CREATE TRIGGER trigger-name
[BEFORE |
AFTER] [ INSERT | DELETE | UPDATE [OR ...]]
ON
table-name FOR EACH ROW
EXECUTE
PROCEDURE function-name [(args)];
PL / pgsql dan trigger
Fungsi trigger dapat dibuat
dengan PL / pgsql dan direferensikan dalam definisi PostgreSQL trigger. Istilah
"fungsi trigger" adalah sebuah cara untuk mengacu pada fungsi yang
dimaksudkan untuk dipanggil oleh trigger. trigger mendefinisikan operasi yang
dilakukan ketika peristiwa tertentu terjadi dalam database. sebuah PL / pgsql
memicu fungsi dapat direferensikan oleh trigger sebagai operasi yang akan
dilakukan ketika acara trigger itu terjadi.
Definisi trigger dan definisi
terkait memicu fungsinya adalah dua hal yang berbeda. trigger didefinisikan
dengan perintah SQL 'CREATE TRIGGER', sedangkan fungsi trigger didefinisikan
menggunakan SQL perintah 'CREATE FUNCTION'.
Fungsi trigger harus
didefinisikan sebagai menerima argumen, dan mengembalikan nilai khusus tipe
data 'OPAQUE'. sintaks 'CREATE FUNCTION' untuk mendefinisikan fungsi trigger PL
/ pgsql ditunjukkan berikut ini :
Creating trigger functions
CREATE FUNCTION function_identifier ()
RETURNS opaque AS '
DECLARE
declarations;
[...]
BEGIN
statements;
[...]
END;
' LANGUAGE 'plpgsql';
Hasil praktikum
Menggunakan SQL Shell (PSQL)
Server [localhost]:
Database [postgres]:
Port [5432]:
Username [postgres]: ayu
Password for user ayu:
psql (9.3.5)
WARNING: Console code page (850) 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 ayu13650039
WARNING: Console code page (850) 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 "ayu13650039" as user
"ayu".
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 !
ayu13650039=>
create function konversi_sh (x float)
ayu13650039->
returns float
ayu13650039->
as 'select ((x-32)/1.8);'
ayu13650039->
language 'sql';
CREATE FUNCTION
ayu13650039=>
select konversi_sh (32);
konversi_sh
-------------
0
(1 row)
ayu13650039=>
select konversi_sh (100);
konversi_sh
------------------
37.7777777777778
(1 row)
2. Buatlah fungsi untuk mencari alamat mahasiswa
dari tabel mahasiswa berdasarkan nama
mahasiswa.
Kemudian jalankan dengan perintah SELECT !
ayu13650039=>
select* from mahasiswa;
nim_mah | nama_mah | alamat_mah | id_fak | no_tlp
| gender
---------+-----------+------------+--------+--------------+--------
14 | luki | ponorogo |
2 | 08257656879 | L
11 | Sinta | malang |
1 | 0856789012 | P
13 | Wana | kediri |
4 | 085345673645 | P
15 | adi | malang |
1 | 089873654353 | L
16 | Egi | mojokerto |
1 | 085765432123 | P
17 | runi | bali |
1 | 0857789012 | P
12 | edi | mojokerto |
3 | 985245678213 | P
44 |
ayu+++ | malang | 1 | 085787654321 | P
(8 rows)
ayu13650039=>
create or replace function cari_alamat (nama in text)
ayu13650039->
returns text
ayu13650039->
as 'select (alamat_mah) from mahasiswa
ayu13650039'>
where nama_mah=nama;'
ayu13650039->
language 'sql';
CREATE FUNCTION
ayu13650039=>
select cari_alamat ('Sinta');
cari_alamat
-------------
malang
(1 row)
ayu13650039=>
select cari_alamat ('runi');
cari_alamat
-------------
bali
(1 row)
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 !
ayu13650039=>
create or replace function hitung_nilai (integer)
ayu13650039->
returns text
ayu13650039->
as 'declare hasil text;
ayu13650039'>
begin
ayu13650039'>
case
ayu13650039'>
when $1>100 or $1<0 then hasil=''nilai salah'';
ayu13650039'>
when $1>=90 then hasil=''nilai A'';
ayu13650039'>
when $1>=70 then hasil=''nilai B'';
ayu13650039'>
when $1>=60 then hasil=''nilai C'';
ayu13650039'>
when $1>=50 then hasil=''nilai D'';
ayu13650039'>
else hasil=''nilai E'';
ayu13650039'>
end case;
ayu13650039'>
return hasil;
ayu13650039'>
end;'
ayu13650039->
language 'plpgsql';
CREATE FUNCTION
ayu13650039=>
select hitung_nilai (82);
hitung_nilai
--------------
nilai B
(1 row)
ayu13650039=>
select hitung_nilai (52);
hitung_nilai
--------------
nilai D
(1 row)
ayu13650039=>
select hitung_nilai (105);
hitung_nilai
--------------
nilai salah
(1 row)
ayu13650039=>
create or replace function hitung_nilai2 (integer)
ayu13650039->
returns text
ayu13650039->
as 'declare hasil text;
ayu13650039'>
begin
ayu13650039'>
if $1>100 or $1<0 then select into hasil ''nilai salah'';
ayu13650039'>
elseif $1>=90 then select into hasil ''nilai A'';
ayu13650039'>
elseif $1>=70 then select into hasil ''nilai B'';
ayu13650039'>
elseif $1>=60 then select into hasil ''nilai C'';
ayu13650039'>
elseif $1>=50 then select into hasil ''nilai D'';
ayu13650039'>
else select into hasil ''nilai E'';
ayu13650039'>
end if;
ayu13650039'>
return hasil;
ayu13650039'>
end;'
ayu13650039->
language 'plpgsql';
CREATE FUNCTION
ayu13650039=>
select hitung_nilai2 (82);
hitung_nilai2
---------------
nilai B
(1 row)
ayu13650039=>
select hitung_nilai2 (52);
hitung_nilai2
---------------
nilai D
(1 row)
ayu13650039=>
select hitung_nilai2 (1004);
hitung_nilai2
---------------
nilai salah
(1 row)
4. Buatlah fungsi menggunakan
pl/pgsql untuk mencari
bilangan ganjil atau
genap dari
bilangan yang
diinputkan. Kemudian jalankan dengan perintah SELECT !
ayu13650039=>
create or replace function genap_ganjil(integer)
ayu13650039->
returns text
ayu13650039->
as 'declare hasil text;
ayu13650039'>
begin
ayu13650039'>
if $1%2=0 then select into hasil ''Bilangan Genap'';
ayu13650039'>
else select into hasil ''Bilangan Ganjil'';
ayu13650039'>
end if;
ayu13650039'>
return hasil;
ayu13650039'>
end;'
ayu13650039->
language 'plpgsql';
CREATE FUNCTION
ayu13650039=>
select genap_ganjil(77);
genap_ganjil
-----------------
Bilangan Ganjil
(1 row)
ayu13650039=>
select genap_ganjil(64);
genap_ganjil
----------------
Bilangan Genap
(1 row)
5. Tambahkan
kolom modifikasi pada
tabel mahasiswa. Dimana
setiap ada insert
atau
update maka
tanggal pada kolom
modifikasi akan menunjukkan
tanggal perubahan
tersebut
dilakukan.
ayu13650039=>
alter table mahasiswa add column modifikasi varchar (15);
ALTER TABLE
ayu13650039=>
select*from mahasiswa;
nim_mah | nama_mah | alamat_mah | id_fak | no_tlp
| gender | modifikasi
---------+-----------+------------+--------+--------------+--------+------------
14 | luki | ponorogo |
2 | 08257656879 | L |
11 | Sinta | malang |
1 | 0856789012 | P |
13 | Wana | kediri | 4 | 085345673645 | P |
15 | adi | malang |
1 | 089873654353 | L |
16 | Egi | mojokerto |
1 | 085765432123 | P |
17 | runi | bali |
1 | 0857789012 | P |
12 | edi
| mojokerto |
3 | 985245678213 | P |
44 |
ayu+++ | malang | 1 | 085787654321 | P |
(8 rows)
ayu13650039=>
create or replace function modif_trigger()
ayu13650039->
returns opaque
ayu13650039->
as 'begin
ayu13650039'>
new.modifikasi=current_date;
ayu13650039'>
return new;
ayu13650039'>
end;'
ayu13650039->
language 'plpgsql';
CREATE FUNCTION
ayu13650039=>
create trigger modif_data
ayu13650039->
before insert or update
ayu13650039->
on mahasiswa
ayu13650039->
for each row
ayu13650039->
execute procedure modif_trigger();
WARNING: changing return type of function
modif_trigger from "opaque" to "trigg
er"
CREATE TRIGGER
ayu13650039=>
insert into mahasiswa values (7, 'rosyy', 'moker', 1, '085765456',
'P');
INSERT 0 1
ayu13650039=>
select*from mahasiswa;
nim_mah | nama_mah | alamat_mah | id_fak | no_tlp
| gender | modifikasi
---------+-----------+------------+--------+--------------+--------+------------
14 | luki | ponorogo |
2 | 08257656879 | L |
11 | Sinta | malang |
1 | 0856789012 | P |
13 | Wana | kediri |
4 | 085345673645 | P |
15 | adi | malang |
1 | 089873654353 | L |
16 | Egi | mojokerto |
1 | 085765432123 | P |
17 | runi | bali |
1 | 0857789012 | P |
12 | edi | mojokerto |
3 | 985245678213 | P |
44 |
ayu+++ | malang | 1 | 085787654321 | P |
7 | rosyy | moker |
1 | 085765456 | P | 2014-11-22
(9 rows)
ayu13650039=>
Hasil praktikum
Menggunakan SQL Shell (PSQL)
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\Ayu>cd..
C:\Users>cd..
C:\>cd xampp/x/mysql/bin
C:\xampp\x\mysql\bin>mysql -u root -p
Enter password:
Welcome to the MySQL monitor.
Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.20 MySQL Community Server (GPL)
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights
reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use ayu13650039;
Database changed
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 !
mysql>
delimiter $$
mysql> create
function konversi_suhu(a float)
-> returns float
-> begin
-> return ((a-32)/1.8);
-> end $$
Query OK, 0 rows
affected (0.24 sec)
mysql>
delimiter ;
mysql> select
konversi_suhu(32);
+-------------------+
|
konversi_suhu(32) |
+-------------------+
| 0 |
+-------------------+
1 row in set (0.08
sec)
mysql> select
konversi_suhu(150);
+--------------------+
|
konversi_suhu(150) |
+--------------------+
| 65.55555725097656 |
+--------------------+
1 row in set (0.00
sec)
2. Buatlah fungsi untuk mencari alamat mahasiswa
dari tabel mahasiswa berdasarkan nama
mahasiswa.
Kemudian jalankan dengan perintah SELECT !
mysql>
delimiter $$
mysql> create
function mencari_alamat(nama text)
-> returns text
-> begin
-> declare hasil text;
-> select alamat_mah into hasil
-> from mahasiswa
-> where nama_mah=nama;
-> return hasil;
-> end;
-> $$
Query OK, 0 rows
affected (0.00 sec)
mysql> select*
from mahasiswa;
-> $$
+---------+-----------+------------+--------+--------------+--------+
| nim_mah |
nama_mah | alamat_mah | id_fak |
no_tlp | gender |
+---------+-----------+------------+--------+--------------+--------+
| 11 | Sinta | malang |
1 | 085672837462 | P |
| 12 | edi | mojokerto |
3 | 092837480912 | P |
| 13 | wana | kediri |
4 | 098765432123 | P |
| 14 | luki | ponorogo |
2 | 08257656879 | L |
| 15 | adi | malang |
1 | 053647586978 | L |
| 16 | Egi | mojokerto |
1 | 085726354766 | P |
| 17 | runi | bali |
1 | 087736452623 | L |
| 50 |
ayu+++ | malang | 1 | 085676564213 | B |
| 500 | ayu | mojokerto |
1 | 085676564213 | B |
+---------+-----------+------------+--------+--------------+--------+
9 rows in set
(0.00 sec)
mysql> select
mencari_alamat ('Sinta');
-> $$
+--------------------------+
| mencari_alamat
('Sinta') |
+--------------------------+
| malang |
+--------------------------+
1 row in set (0.02
sec)
mysql> select
mencari_alamat ('adi');
-> $$
+------------------------+
| mencari_alamat
('adi') |
+------------------------+
| malang |
+------------------------+
1 row in set (0.00
sec)
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 !
mysql> create
function hasil_nilai (x integer)
->
returns text
->
begin
->
declare hasil text;
->
if x>100 or x<0 then
->
select "nilai salah" into hasil;
->
elseif x>=90 then
->
select "nilai A" into hasil;
->
elseif x>=70 then
->
select "nilai B" into hasil;
->
elseif x>=60 then
->
select "nilai C" into hasil;
->
elseif x>=50 then
->
select "nilai D" into hasil;
->
else
->
select "nilai E" into hasil;
->
end if;
->
return hasil;
->
end;
->
$$
Query OK, 0 rows
affected (0.00 sec)
mysql> select
hasil_nilai (89);
->
$$
+------------------+
| hasil_nilai (89)
|
+------------------+
| nilai B |
+------------------+
1 row in set (0.00
sec)
mysql> select
hasil_nilai (54);
-> $$
+------------------+
| hasil_nilai (54)
|
+------------------+
| nilai D |
+------------------+
1 row in set (0.00
sec)
mysql> select
hasil_nilai (109);
-> $$
+-------------------+
| hasil_nilai
(109) |
+-------------------+
| nilai salah |
+-------------------+
1 row in set (0.00
sec)
4. Buatlah fungsi menggunakan
pl/pgsql untuk mencari
bilangan ganjil atau
genap dari
bilangan yang
diinputkan. Kemudian jalankan dengan perintah SELECT !
mysql> create
function genap_ganjil(a integer)
-> returns text
-> begin
-> declare hasil text;
-> if a%2=0 then
-> select "bilangan genap"
into hasil;
-> else
-> select "bilangan ganjil"
into hasil;
-> end if;
-> return hasil;
-> end;
-> $$
Query OK, 0 rows
affected (0.01 sec)
mysql> select
genap_ganjil (45);
-> $$
+-------------------+
| genap_ganjil
(45) |
+-------------------+
| bilangan
ganjil |
+-------------------+
1 row in set (0.07
sec)
mysql> select
genap_ganjil (64);
-> $$
+-------------------+
| genap_ganjil
(64) |
+-------------------+
| bilangan genap |
+-------------------+
1 row in set (0.00
sec)
5. Tambahkan
kolom modifikasi pada
tabel mahasiswa. Dimana
setiap ada insert
atau
update maka
tanggal pada kolom
modifikasi akan menunjukkan
tanggal perubahan
tersebut
dilakukan.
mysql>
delimiter $$
mysql> alter
table mahasiswa add modifikasi text;
-> $$
Query OK, 0 rows
affected (0.51 sec)
Records: 0 Duplicates: 0
Warnings: 0
mysql>
delimiter $$
mysql> create
trigger modifikasi1
-> before insert
-> on mahasiswa
-> for each row
-> begin
-> set new.modifikasi=current_date;
-> end;
-> $$
Query OK, 0 rows
affected (0.02 sec)
mysql> create
trigger modifikasi2
-> before update
-> on mahasiswa
-> for each row
-> begin
-> set new.modifikasi=current_date;
-> end;
-> $$
Query OK, 0 rows
affected (0.12 sec)
mysql> insert
into mahasiswa (nim_mah, nama_mah, alamat_mah, id_fak, no_tlp, gen
der) values (5,
'yuyu', 'kediri', 2, '08756573576', 'P');
-> $$
Query OK, 1 row
affected (0.14 sec)
mysql> select *
from mahasiswa;
-> $$
+---------+-----------+------------+--------+--------------+--------+------------+
| nim_mah |
nama_mah | alamat_mah | id_fak |
no_tlp | gender | modifikasi |
+---------+-----------+------------+--------+--------------+--------+------------+
| 5 | yuyu | kediri |
2 | 08756573576 | P | 2014-11-23 |
| 11 | Sinta | malang |
1 | 085672837462 | P | NULL |
| 12 | edi | mojokerto |
3 | 092837480912 | P | NULL |
| 13 | wana | kediri |
4 | 098765432123 | P | NULL |
| 14 | luki | ponorogo |
2 | 08257656879 | L | NULL |
| 15 | adi | malang |
1 | 053647586978 | L | NULL |
| 16 | Egi | mojokerto |
1 | 085726354766 | P | NULL |
| 17 | runi | bali |
1 | 087736452623 | L | NULL |
| 50 |
ayu+++ | malang | 1 | 085676564213 | B | NULL |
| 500 | ayu | mojokerto |
1 | 085676564213 | B | NULL |
+---------+-----------+------------+--------+--------------+--------+------------+
10 rows in set
(0.00 sec)
mysql> update
mahasiswa set alamat_mah='kediri' where nim_mah=13;
Query OK, 1 row
affected (0.20 sec)
Rows matched:
1 Changed: 1 Warnings: 0
mysql> select *
from mahasiswa
-> ;
+---------+-----------+------------+--------+--------------+--------+-----------
-+
| nim_mah |
nama_mah | alamat_mah | id_fak |
no_tlp | gender | modifikasi
|
+---------+-----------+------------+--------+--------------+--------+------------+
| 5 | yuyu | kediri |
2 | 08756573576 | P | 2014-11-23|
| 11 | Sinta | malang |
1 | 085672837462 | P | NULL |
| 12 | edi | mojokerto |
3 | 092837480912 | P | NULL |
| 13 | wana | kediri |
4 | 098765432123 | P |
2014-11-24|
| 14 | luki | ponorogo |
2 | 08257656879 | L | NULL |
| 15 | adi | malang |
1 | 053647586978 | L | NULL|
| 16 | Egi | mojokerto |
1 | 085726354766 | P | NULL|
| 17 | runi | bali |
1 | 087736452623 | L | NULL |
| 50 |
ayu+++ | malang | 1 | 085676564213 | B | NULL |
| 500 | ayu | mojokerto |
1 | 085676564213 | B | NULL |
+---------+-----------+------------+--------+--------------+--------+------------+
10 rows in set
(0.00 sec)
mysql>
Perbandingan Antara SQL
Shell (psql) dan CMD mysql pada XAMPP
Pada perbandingan kali ini, beberapa syntak PSQL dan CMD MySQL itu ada
yang sama dan ada juga yang berbeda.
1.
Didalam PostgreSQL, tidak
memerlukan delimiter seperti pada CMD MySQL yang wajib menggunakan delimiter di
awal sebagai pembuka dan di akhir sebagai penutup.
2. Didalam postgreSQL, untuk mengapit bentuk string seperti pada
soal no 3 dan 4 itu menggunakan tanda petik satu atas (')
2x. tetapi pada PostgreSQL MySQL, untuk mengapit string bisa langsung
menggunakan tanda petik 2 atas (").
3. Pada PostgreSQL jika akan mengeksekusi trigger, harus membuat
fungsi terlebih dahulu. tetapi pada CMD MySQL jika akan mengeksekusi trigger
tidak perlu membuat fungsi, langsung membuat trigger. Bisa dilihat soal nomor
5.
4. Pada CMD MySQL, trigger mepunyai tipe data khusus untuk return yaitu
OPAQUE. tetapi pada PostgrSQL tidak punya. Bisa dilihat soal nomor 5.
5. Pada PostgreSQL, menggabungkan 2 perintah yang berbeda seperti
soal nomor 5 itu bisa. tetapi pada CMD MySQL tidak bisa, harus satu persatu. Berikut
pembuktian point 3-5 di atas :
Pada PostgreSQL :
ayu13650039=>
create or replace function modif_trigger() --> (membuat fungsi dahulu)
ayu13650039->
returns opaque --> (tipe data khusus)
ayu13650039-> as
'begin
ayu13650039'>
new.modifikasi=current_date;
ayu13650039'> return new;
ayu13650039'>
end;'
ayu13650039->
language 'plpgsql';
CREATE FUNCTION
ayu13650039=>
create trigger modif_data
ayu13650039->
before insert or update --> (terdapat 2 perintah berbeda)
ayu13650039->
on mahasiswa
ayu13650039->
for each row
ayu13650039->
execute procedure modif_trigger();
WARNING: changing return type of function
modif_trigger from "opaque" to "trigger"
CREATE TRIGGER
Pada CMD MySQL :
mysql>
delimiter $$ -->(harus ada delimiter)
mysql> create
trigger modifikasi1
-> before
insert or update --> (2 perintah berbeda membuat Error)
-> on
mahasiswa
-> for each
row
-> begin
-> set
new.modifikasi=current_date;
-> end;
-> $$
ERROR 1064
(42000): You have an error in your SQL syntax; check the manual that
corresponds to
your MySQL server version for the right syntax to use near 'or up
date
on mahasiswa
for each row
begin
set
new.modifikasi=current_date;
end' at line 2
Kesimpulan
Kesimpulan dari
hasil praktikum dan pekrjaan rumah yang telah dikerjakan yaitu sebagai berikut
:
1. Fungsi SQL adalah kumpulan syntak yang dibuat untuk mempermudah
pengguna supaya tidak mengetiknya berulang kali, cukup memanggil fungsi yang
telah dibuat tersebut dengan perintah ‘SELECT’ dan kemudian mengisi/menginput .
2. Di dalam PostgreSQL, harus di dahului delimiter untuk membuat
fungsi.
3. PL/PGSQL merupakan salah satu bahasa lain untuk membuat sebuah
fungsi yang mana biasanya bahasa
ini digunakan untuk
menangani fungsi yang
lebih kompleks dan lebih detail.
4. Trigger merupakan yang dibuat
pada setiap event tertentu yang terjadi pada tabel tertentu. Trigger memiliki
tipe data khusus untuk mengembalikan hasil (return) yaitu OPAQUE. Tidak seperti
pada CMD MySQL, di postgreSQL untuk
mengeksekusi trigger harus membuat
fungsi terlebih dahulu.
Kritik /Saran
Saya menyadari dalam postingan ini masih banyak
kekurangan sehingga kritik dari pembaca (khususnya yang lebih mengerti tentang
SQL, PL/PGSQL dan Trigger) untuk membenarkan agar tidak terjadi kesalah
pahaman.
Saran kepada
pembaca untuk tidak putus asa dalam mengerjakan tugas yang bersangkutan dengan
postingan ini dan terus mencoba agar bisa menjadi yang lebih baik. Tidak bosan
saya mengingatkan untuk berdoa terlebih dahulu
agar sukses dan lancar dalam mengerjakannya.
Semoga ilmu
yang sedikit ini bermanfaat bagi anda sekalian. Terima kasih ^_^
DAFTAR PUSTAKA
Pengenalan PL/PGSQL.pdf
PL2.pdf