Upload
erwin-setiawan
View
372
Download
4
Embed Size (px)
Citation preview
CONTOH STORE PROCEDURE DAN FUNCTION
Masuk dalam mysql dan buat database terlebih dahulu.
Enter password: ****
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.45-community-nt-log MySQL Community Edition (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create database latihan6;
Query OK, 1 row affected (0.00 sec)
mysql> use latihan6
Database changed
mysql> create table mahasiswa(no_mhs varchar(9),nama varchar(25),alamat
text)
-> ;
Query OK, 0 rows affected (0.09 sec)
PROCEDURE
Untuk memudahkan dalam pembuatan store procedure dan function ini dapat
digunakan sqlyog.
Membuat procedure untuk mengisi data mahasiswa.
DELIMITER $$
DROP PROCEDURE IF EXISTS `latihan6`.`insert_data`$$
CREATE PROCEDURE `latihan6`.`insert_data`(nomhs char(9),nama
varchar(25),alamat varchar(60))
BEGIN
insert into mahasiswa values(nomhs,nama,alamat);
END$$
DELIMITER ;
Untuk memanggilnya dengan cara memasukkan parameter kedalam
procedure yang telah dibuat seperti berikut ini.
mysql> select*from mahasiswa;
Empty set (0.00 sec)
mysql> call insert_data('095410168', 'purwant', 'bantul yogyakarta');
Query OK, 1 row affected (0.03 sec)
mysql> select*from mahasiswa;
+-----------+---------+-------------------+
| no_mhs | nama | alamat |
+-----------+---------+-------------------+
| 095410168 | purwant | bantul yogyakarta |
+-----------+---------+-------------------+
1 row in set (0.00 sec)
mysql> call insert_data('095410178', 'ekosetiawan', 'bantul
yogyakarta');
Query OK, 1 row affected (0.00 sec)
mysql> select*from mahasiswa;
+-----------+-------------+-------------------+
| no_mhs | nama | alamat |
+-----------+-------------+-------------------+
| 095410168 | purwant | bantul yogyakarta |
| 095410178 | ekosetiawan | bantul yogyakarta |
+-----------+-------------+-------------------+
MEMBUAT PROCEDURE UNTUK MENGUPDATE DATA
MAHASISWA
DELIMITER $$
DROP PROCEDURE IF EXISTS `latihan6`.`update_mahasiswa`$$
CREATE PROCEDURE `latihan6`.`update_mahasiswa`(nim
char(9),na varchar(25),almt varchar(35))
BEGIN
update mahasiswa set nama=na , alamat=almt where no_mhs=nim;
END$$
DELIMITER ;
Untuk memanggil procedure tersebut dapat di lakukan seperti ini
mysql> select*from mahasiswa;
+-----------+-------------+-------------------+
| no_mhs | nama | alamat |
+-----------+-------------+-------------------+
| 095410168 | purwant | bantul yogyakarta |
| 095410178 | ekosetiawan | bantul yogyakarta |
+-----------+-------------+-------------------+
2 rows in set (0.00 sec)
Disini akan mengubah nama dan alamat dari mahasiswa yang
bernama purwant,
Mengganti nama menjadi purwanto dan alamatnya di sleman
jogjakarta.
Untuk melakukannya dapat dengan cara memanggil procedure
update_mahasiswa sebagai berikut.
mysql> call update_mahasiswa('095410168', 'purwanto', 'sleman
jogjakarta');
Query OK, 1 row affected (0.00 sec)
Hasilnya adalah sebagai berikut.
mysql> select*from mahasiswa;
+-----------+-------------+-------------------+
| no_mhs | nama | alamat |
+-----------+-------------+-------------------+
| 095410168 | purwanto | sleman jogjakarta |
| 095410178 | ekosetiawan | bantul yogyakarta |
+-----------+-------------+-------------------+
2 rows in set (0.00 sec)
MEMBUAT PROCEDURE UNTUK MENGHAPUS MAHASISWA
Tambahkan data sebagai berikut
mysql> call insert_data('000', 'gk jelas', 'belum punya');
Query OK, 1 row affected (0.00 sec)
mysql> select*from mahasiswa;
+-----------+-------------+-------------------+
| no_mhs | nama | alamat |
+-----------+-------------+-------------------+
| 095410168 | purwanto | sleman jogjakarta |
| 095410178 | ekosetiawan | bantul yogyakarta |
| 000 | gk jelas | belum punya |
+-----------+-------------+-------------------+
Procedure hapus data mahasiswa
DELIMITER $$
DROP PROCEDURE IF EXISTS `latihan6`.`hapus_mhs`$$
CREATE PROCEDURE `latihan6`.`hapus_mhs`(nim char(9))
BEGIN
delete from mahasiswa where no_mhs=nim;
END$$
DELIMITER ;
untuk menghapus data mahasiswa dapat di lakukan dengan cara
memasukkan no_mhs yang akan dihapus pada parameter.
Contoh:
mysql> select*from mahasiswa;
+-----------+-------------+-------------------+
| no_mhs | nama | alamat |
+-----------+-------------+-------------------+
| 095410168 | purwanto | sleman jogjakarta |
| 095410178 | ekosetiawan | bantul yogyakarta |
| 000 | gk jelas | belum punya |
+-----------+-------------+-------------------+
Hapus mahasiswa dengan no_mhs 000.
mysql> call hapus_mhs('000');
Query OK, 1 row affected (0.00 sec)
Hasilnya menjadi
mysql> select*from mahasiswa;
+-----------+-------------+-------------------+
| no_mhs | nama | alamat |
+-----------+-------------+-------------------+
| 095410168 | purwanto | sleman jogjakarta |
| 095410178 | ekosetiawan | bantul yogyakarta |
+-----------+-------------+-------------------+
2 rows in set (0.00 sec)
FUNCTION
Membuat fungsi untuk menampilkan alamat mahasiswa.
DELIMITER $$
DROP FUNCTION IF EXISTS `latihan6`.`cekalamat`$$
CREATE FUNCTION `latihan6`.`cekalamat`(nim char(9))
RETURNS text
BEGIN
declare almt text;
select alamat into almt from mahasiswa where no_mhs=nim;
return almt;
END$$
DELIMITER ;
Didalam function mysql declare merupakan tempat menampung hasil dari
perintah query, karena didalam function hanya akan mengembalikan sebuah
nilai. Maka perintah select diatas dimasukkan dalam declare alamat, yaitu pada
perintah select alamat into.
Untuk memanggil fucntion tersebut dapat dilakukan dengan cara seperti berikut.
mysql> select cekalamat('095410168');
+------------------------+
| cekalamat('095410168') |
+------------------------+
| sleman jogjakarta |
+------------------------+
1 row in set (0.00 sec)
Perintah function hanya akan mengembalikan sebuah nilai sehingga dapat
dimasukkan pada query biasa untuk mengecek alamat mahasiswa.
Seperti contoh berikut ini.
mysql> select nama,cekalamat(no_mhs) from mahasiswa;
+-------------+-------------------+
| nama | cekalamat(no_mhs) |
+-------------+-------------------+
| purwanto | sleman jogjakarta |
| ekosetiawan | bantul yogyakarta |
+-------------+-------------------+
2 rows in set (0.00 sec)
Setiap no_mhs akan memiliki nilai kembalian berupa alamat.
CONTOH PROCEDURE DAN FUNCTION PERHITUNGAN
Procedure penjumlahan tanpa parameter
DELIMITER $$
DROP PROCEDURE IF EXISTS `latihan6`.`tambah`$$
CREATE PROCEDURE `latihan6`.`tambah`()
BEGIN
select 8+9;
END$$
DELIMITER ;
mysql> call tambah;
+-----+
| 8+9 |
+-----+
| 17 |
+-----+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Procedure operasi perhitungan sederhana dengan dua buah parameter
DELIMITER $$
DROP PROCEDURE IF EXISTS `latihan6`.`hitung`$$
CREATE PROCEDURE `latihan6`.`hitung`(a int,b int)
BEGIN
select a+b,a-b,a*b,a/b;
END$$
DELIMITER ;
mysql> call hitung(16,4);
+------+------+------+--------+
| a+b | a-b | a*b | a/b |
+------+------+------+--------+
| 20 | 12 | 64 | 4.0000 |
+------+------+------+--------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
Membuat function untuk menghitung
DELIMITER $$
DROP FUNCTION IF EXISTS `latihan6`.`hitung`$$
CREATE FUNCTION `latihan6`.`hitung`(a int,b int)
RETURNS int
BEGIN
return a+b;
END$$
DELIMITER ;
mysql> select hitung(9,6);
+-------------+
| hitung(9,6) |
+-------------+
| 15 |
+-------------+
1 row in set (0.00 sec)
Referensi
- Mysql reference manual
UNTUK PEMBAHASAN PRAKTIKUM SILAHKAN BAHAS TENTANG
PROCEDURE PADA PRAKTIKUM DIANTARANYA SEBAGAI BERIKUT.
DELIMITER $$
DROP PROCEDURE IF EXISTS `bank`.`isi_saldo`$$
CREATE PROCEDURE `bank`.`isi_saldo`(noreck varchar(10),jumlah int)
BEGIN
update saldo_nasabah set jumlah_saldo=jumlah_saldo + jumlah;
END$$
DELIMITER ;
DELIMITER $$
CREATE PROCEDURE `transfer`(pengirim varchar(10),penerima
varchar(10),jumlah_kirim int)
BEGIN
update saldo_nasabah set jumlah_saldo=jumlah_saldo + jumlah_kirim
where no_reck=penerima;
update saldo_nasabah set jumlah_saldo=jumlah_saldo - jumlah_kirim
where no_reck=pengirim;
insert into transfer values (pengirim,penerima,jumlah_kirim,date(now()));
END$$
DELIMITER ;
DELIMITER $$
CREATE PROCEDURE `tambah_nsabah`(noreck varchar(10),nm
varchar(40),almt varchar(70),jenis char(1))
BEGIN
insert into nasabah value(noreck,nm,almt,jenis);
insert into saldo_nasabah value(noreck,200000);
END$$
DELIMITER ;bank
DELIMITER $$
CREATE FUNCTION `ceksaldo`(noreck varchar(10))
RETURNS int(11)
BEGIN
declare saldo int;
select jumlah_saldo into saldo from saldo_nasabah where no_reck=noreck;
return saldo;
END$$
DELIMITER ;
select nama_nasabah ,ceksaldo(no_reck) from nasabah;
JELASKAN PROCEDURE DAN FUNCTION
DIATASBESERTA ANALISIS HASIL DARI
EKSEKUSI STOREDPROCEDURE DAN FUNCTION
TERSEBUT !!!!!