Materi MySQL Part 5

download Materi MySQL Part 5

of 11

Transcript of Materi MySQL Part 5

  • 8/10/2019 Materi MySQL Part 5

    1/11

    MATERI PART 5 Prak. BASISDATA

    FUNCTION DAN PROSEDURE

    LABORATORIUM 4 BASISDATA

    MENU PART INI :

    1. Intro Stored Routine

    2. Function

    a. Membuat function

    b. Melihat function yang telah dibuat

    c. Menghapus function

    3. Procedure

    a. Membuat procedure

    b. Parameter dalam procedure

    i. Parameter IN

    ii. Parameter OUT

    iii. Parameter INOUT

    iv. Melihat procedure yang telah dibuat

    v. Menghapus procedure

    4. Pemrograman di Function dan Procedure

    a. Variabel

    b. Kendali Kondisional.

    i. Kendali IF

    ii. Kendali CASE

    c. Perulangan

    i. Perulangan WHILE

    ii. Perulangan REPEAT UNTIL

    iii. Perulangan LOOP

  • 8/10/2019 Materi MySQL Part 5

    2/11

    1.

    Fuction

    Sebuah function dapat digunakan secara langsung dalam statement SELECT,

    UPDATE, dan DELETE. Hasil dari function dapat dikembalikan sebagai

    output. Sebuah function hanya dapat mengembalikan sebuah nilai saja.

    1.1 Membuat fuction

    Sebelum kita membuat function terlebih dahulu kita siapkan sebuah

    tabel terlebih dahulu.

    mysql> select*from pekerja;

    +------------+---------------+

    | nama_depan | nama_belakang |

    +------------+---------------+

    | John | Doe |

    | Alison | Mathews |

    | James | Smith |

    | Celia | Rice |

    | Robert | Black |

    | Linda | Green |

    | David | Larry |

    | Hercule | Poirot |

    | Lincoln | Rhyme |

    | Sherlock | Holmes |

    +------------+---------------+

    10 rows in set (0.00 sec)

    Selanjutnya kita membuat function

  • 8/10/2019 Materi MySQL Part 5

    3/11

    mysql> delimiter //

    mysql> create function nama_lengkap(in_nama_depan varchar(15),

    in_nama_belakang varchar(15))

    -> returns varchar(35)

    -> begin

    -> return concat(in_nama_depan,' ',in_nama_belakang);

    -> end //

    Query OK, 0 rows affected (0.00 sec)

    mysql> delimiter ;

    mysql> select nama_lengkap(nama_depan,nama_belakang) from pekerja;

    +-----------------------------------------+

    | nama_lengkap(nama_depan, nama_belakang) |

    +-----------------------------------------+

    | John Doe |

    | Alison Mathews |

    | James Smith |

    | Celia Rice |

    | Robert Black |

    | Linda Green |

    | David Larry |

    | Hercule Poirot |

    | Lincoln Rhyme |

    | Sherlock Holmes |

    +-----------------------------------------+

    10 rows in set (0.00 sec)

    1.2 Melihat fuction yang telah dibuat

  • 8/10/2019 Materi MySQL Part 5

    4/11

    Function apa saja yang telah kita buat dapat dilihat menggunakan

    statement SHOW FUNCTION STATUS.

    mysql> show function status;

    1.3 Menghapus function

    Function yang telah dibuat dapat dihapus menggunakan DROP FUNCTION

    nama_function.

    mysql> DROP FUNCTION full_name;

    Query OK, 0 rows affected (0.00 sec)

    mysql> SHOW FUNCTION STATUS;

    Empty set (0.00 sec)

    2.

    Procedure

    Procedure dapat berisi statement SQL (INSERT, UPDATE, DELETE, SELECT)

    atau operasi lain yang disimpan dalam database. Sebuah procedure

    dapat dipanggil menggunakan statement CALL nama_procedure disertai

    parameter yang diperlukan.

    2.1 membuat procedure

    sintaks untuk membuat procedure adalah sebagai berikut;

    CREATE PROCEDURE nama_procedure (parameter_procedure())routine_body

    Berikut contoh pembuatan procedure:

  • 8/10/2019 Materi MySQL Part 5

    5/11

    mysql> delimiter //

    mysql> create procedure show_pekerja()

    -> begin

    -> select*from pekerja;

    -> end //

    Query OK, 0 rows affected (0.00 sec)

    mysql> alter table addnama kolom (tipe data)(20);

    mysql> alter table modify tipe

    data(15);

    mysql> update whereno_plat= B-3454-SDE ;

    mysql> call show_pekerja ();

    namatabel = pekerja

    +------------+---------------+--------+---------+-----------+

    | nama_depan | nama_belakang | alamat | gaji | pekerjaan |

    +------------+---------------+--------+---------+-----------+

    | John | Doe | Sleman | 500000 | Programer |

    | Alison | Mathews | Sleman | 500000 | Programer |

    | James | Smith | Bantul | 1000000 | Manager |

    | Celia | Rice | Klaten | 1000000 | Manager |

    | Robert | Black | Klaten | 200000 | Security |

    | Linda | Green | Bantul | 200000 | Security |

    | David | Larry | Bantul | 500000 | Programer |

    | Hercule | Poirot | Klaten | 500000 | Programer |

    | Lincoln | Rhyme | Klaten | 500000 | Programer |

  • 8/10/2019 Materi MySQL Part 5

    6/11

    | Sherlock | Holmes | Sleman | 1000000 | Manager |

    +------------+---------------+--------+---------+-----------+

    10 rows in set (0.00 sec)

    Query OK, 0 rows affected (0.13 sec)

    2.2 parameter dalam procedure

    Procedure menerima parameter (proc_parameter) yang didefinisikan

    sebagai berikut:

    proc_parameter:

    [ IN | OUT | INOUT ] param_name type

    Dalam parameter procedure, didefinisikan jenis parameter, yaitu IN,

    OUT, atau INOUT. Bila tidak dispesifikasikan saat pembuatan, maka

    default jenis parameter yang dipilih adalah IN.

    Parameter IN mengirimkan sebuah nilai ke dalam procedure.

    Procedure bisa saja merubah nilai parameter ini, namun

    perubahan tersebut tidak visibel terhadap pemanggil procedure

    ketika procedure tersebut selesai.

    Parameter OUT mengirimkan nilai dari procedure ke pemanggil.

    Nilai inisial dari parameter ini adalah NULL dan nilainya

    visibel terhadap pemanggil.

    Parameter INOUT diinisialisasi oleh pemanggil, dapat

    dimodifikasi oleh procedure, dan perubahan nilai parameter

    visibel terhadap pemanggil ketika procedure selesai.

    2.2.1parameter IN

    Berikut adalah contoh penggunaan parameter IN:

  • 8/10/2019 Materi MySQL Part 5

    7/11

    mysql> delimiter $$

    mysql> create procedure getPekerjaByAlamat (in namaAlamat

    varchar(255))

    -> begin

    -> select*from pekerja where alamat LIKE namaAlamat;

    -> end $$

    Mysql> delimiter ;

    Pada contoh di atas, dibuat procedure getPekerjaByAlamat dengan

    satu parameter masukan berjenis IN bernama namaAlamat. Procedure

    ini digunakan untuk menampilkan data pada tabel pekerja dengan nama

    kota sesuai parameter masukan. Pemanggilan procedure ini dapat

    dilihat pada contoh di bawah ini. Pada contoh ini, kita memasukkan

    Sleman sebagai parameter masukan procedure.

    mysql> call getPekerjaByAlamat("Sleman");

    +------------+---------------+--------+

    | nama_depan | nama_belakang | Alamat |

    +------------+---------------+--------+

    | John | Doe | Sleman |

    | Alison | Mathews | Sleman |

    | Sherlock | Holmes | Sleman |

    +------------+---------------+--------+

    3 rows in set (0.00 sec)

    Query OK, 0 rows affected (0.02 sec)

    2.2.2parameter OUT

  • 8/10/2019 Materi MySQL Part 5

    8/11

    berikut adalah contoh penggunaan parameter OUT;

    mysql> delimiter :)

    mysql> create procedure getNumPekerja (out numPekerja int)

    -> begin

    -> select count(*) into numPekerja from pekerja;

    -> end :)

    Query OK, 0 rows affected (0.02 sec)

    mysql> delimiter ;

    Pada contoh di atas, dibuat procedure untuk menampilkan jumlah

    pekerja dalam tabel. Hasil query tersebut disimpan dalam variabelnumPekerja dengan statement INTO numPekerja. Pemanggilan pekerja

    dengan parameter OUT dilakukan dengan menggunakan variabel session

    yang diawali dengan karakter @. Pemanggilan procedure getNumPekerja

    ditunjukkan sebagai berikut:

    mysql> call getNumPekerja(@num);

    Query OK, 1 row affected (0.05 sec)

    mysql> select @num;

    +------+

    | @num |

    +------+

    | 10 |

    +------+

    1 row in set (0.00 sec)

    2.2.3parameter INOUT

    berikut adalah contoh penggunaan parameter INOUT:

    mysql> delimiter ^^

    mysql> create procedure increase(inout number int)

    -> begin

  • 8/10/2019 Materi MySQL Part 5

    9/11

    -> set number = number + 15;

    -> end ^^

    Query OK, 0 rows affected (0.04 sec)

    mysql> delimiter ;

    Pada contoh di atas, kita membuat procedure increase untuk

    menambahkan input dengan nilai 15. Memodifikasi nilai parameter

    input dilakukan dengan menggunakan SET. Contoh berikut

    memperlihatkan bagaimana memanggil procedure increase. Kita

    mendefinisikan terlebih dahulu variabel session @num dengan nilai

    100. Kemudian setelah pemanggilan increase, nilai @num menjadi 115.

    mysql> set @num = 100;

    Query OK, 0 rows affected (0.00 sec)

    mysql> call increase(@num);

    Query OK, 0 rows affected (0.00 sec)

    mysql> select @num;

    +------+

    | @num |

    +------+

    | 115 |

    +------+

    1 row in set (0.00 sec)

    2.2.4melihat procedure yang telah dibuat

    Procedure yang telah kita buat dapat dilihat menggunakan statement

    SHOW PROCEDURE STATUS sebagai berikut:

    mysql> show procedure status;

  • 8/10/2019 Materi MySQL Part 5

    10/11

    2.2.5menghapus procedure

    Procedure yang telah kita buat dapat dihapus menggunakan DROP

    PROCEDURE.

    Mysql> DROP PROCEDURE increaseGaji;

    INPUT DATA DENGAN PROCEDURE

    mysql> create table pekerja( nama varchar(10), alamat varchar(10));

    Query OK, 0 rows affected (0.13 sec)

    mysql> delimiter #

    mysql> create procedure isi_data( in nama_depan varchar(10),

    nama_belakang varchar(10), alamat varchar(20), gaji int(8),

    pekerjaan varchar (15))

    -> begin

    -> insert into pekerja values(nama_depan, nama_belakang,

    alamat, gaji, pekerjaan);

    -> end #

    Query OK, 0 rows affected (0.02 sec)

    call isi_data(,,,,,);

  • 8/10/2019 Materi MySQL Part 5

    11/11

    call isi_data(Chika, Surabaya);

    mysql> select * from pekerja;

    +------+---------+

    | nama | alamat |

    +------+---------+

    | Fera | Abarawa |

    | Rara | Jogja |

    | Didi | Sleman |

    +------+---------+

    HAPUS DATA DENGAN PROCEDURE

    mysql> delimiter #

    mysql> create procedure hapus_data(in namaDepan varchar(10))

    -> begin

    -> delete from pekerja where nama_depan=namaDepan;

    -> end #

    Query OK, 0 rows affected (0.00 sec)

    Mysql> delimiter ;

    Call hapus_data(Didi);

    mysql> select * from pekerja;

    +------+---------+

    | nama | alamat |

    +------+---------+

    | Fera | Abarawa |

    | Rara | Jogja |

    +------+---------+