Materi MySQL Part 6

download Materi MySQL Part 6

of 14

Transcript of Materi MySQL Part 6

  • 8/10/2019 Materi MySQL Part 6

    1/14

    4.Pemrograman di Function dan Procedure

    Di dalam function dan procedure, kita bisa memasukkan logika

    pemrograman. Ada beberapa karakteristik pemrograman yang

    didukung oleh MySQL. Beberapa di antaranya adalah

    penggunaan variabel, kendali kondisional, dan perulangan.

    4.1 Variabel

    Seperti pada pemrograman pada umumnya, kita bisa

    menggunakan variabel lokal pada function dan procedure.

    endeklarasian variabel memiliki sintaks sebagai berikut!

    D"#LA$" var%name &, var%name' ... type &D"(A)L* value'

    +ilai inisialisasi variabel dapat dilakukan menggunakan

    statement D"(A)L*. ika statement D"(A)L* tidak digunakan,

    maka nilai inisialisasi variabel adalah +)LL. enamaan variabel

    lokal bersifat case insensitive. Berikut adalah beberapa contoh

    deklarasi variabel!

    D"#LA$" total%sale -+*

    D"#LA$" , y -+* D"(A)L* /

    emberian nilai ke sebuah variabel dilakukan denganmenggunakan statement S"*. 0asil dari 1uery 2uga dapat

    dimasukkan ke dalam variabel menggunakan S"L"#* -+*3.

    Berikut 4 adalah beberapa contoh pemberian nilai ke variabel.

    S"* total%sale 5 6/7

    S"L"#* #3)+*89: -+*3 numeker2a ($3M peker2a7

  • 8/10/2019 Materi MySQL Part 6

    2/14

    $uang lingkup variabel adalah di antara blok B";-+ 4 "+D di

    mana variabel tersebut dide delimiter %

    mys1l> #$"A*" ()+#*-3+ add*a8ga2i (L3A*8E,F::

    G> $"*)$+S (L3A* 8E,F:

    G> B";-+

    G> D"#LA$" ta (L3A* D"(A)L* /./67

    G> $"*)$+ ga2i 9 8@ G ta:7

    G> "+D %

    Query 3?, / ros aected 8/.// sec:

    mys1l> D"L-M-*"$ 7

    ada contoh di atas, dibuat sebuah function dengan variabel

    bernama ta. =ariabel ini diset memiliki nilai default /./6 dan

    digunakan untuk mengubah nilai ga2i. #ontoh di baah ini

    menun2ukkan penggunaan function add*a.

    mys1l> select nama%depan, add*a8ga2i: from peker2a7

    HGGGGGGGGGGGGHGGGGGGGGGGGGGGH

  • 8/10/2019 Materi MySQL Part 6

    3/14

    I nama%depan I add*a8ga2i: I

    HGGGGGGGGGGGGHGGGGGGGGGGGGGGH

    I ohn I JK6///.// I

    I Alison I JK6///.// I

    I ames I 6////.// I

    I #elia I 6////.// I

    I $obert I @////.// I

    I Linda I @////.// I

    I David I JK6///.// I

    I 0ercule I JK6///.// I

    I Lincoln I JK6///.// I

    I Sherlock I 6////.// I

    HGGGGGGGGGGGGHGGGGGGGGGGGGGGH

    @/ ros in set, C arnings 8/.FE sec:

    S"L"#* add*a8@////:7

    +ama variabel lokal seharusnya tidak sama dengan nama kolom

    dalam tabel database. ika pada statement SQL seperti S"L"#*

    terdapat referensi ke kolom tabel dengan nama yang sama,

    MySQL mereferensikannya sebagai nama variabel. Berikut adalah

    contohnya.

    mys1l> D"L-M-*"$ 99

    mys1l> #$"A*" $3#"D)$" checkScope8:

    G> B";-+

    G> D"#LA$" nama%depan =A$#0A$8@6: D"(A)L* bob7

    G> S"L"#* nama%depan ($3M peker2a7

    G> "+D 99

    Query 3?, / ros aected 8/.6J sec:

  • 8/10/2019 Materi MySQL Part 6

    4/14

    mys1l> D"L-M-*"$ 7

    mys1l> call checkScope8:7

    HGGGGGGGGGGGGH

    I nama%depan I

    HGGGGGGGGGGGGH

    I bob I

    I bob I

    I bob I

    I bob I

    I bob I

    I bob I

    I bob I

    I bob I

    I bob I

    I bob I

    HGGGGGGGGGGGGH

    @/ ros in set 8/.// sec:

    ada contoh di atas, ketika kita melakukan pemilihan S"L"#*

    untuk nama%depan, nilai yang ditampilkan adalah nilai default

    dari variable nama%depan, yaitu bob.

    4.2 Kendali Kondisional

    Seperti layaknya bahasa pemrograman, kita 2uga bisa

    mende

  • 8/10/2019 Materi MySQL Part 6

    5/14

    4.2.1 Kendali IF

    Sintaks dasar dari -( adalah sebagai berikut!

    -( search%condition*0"+ statement%list

    &"LS"-( search%condition*0"+ statement%list' 4

    &"LS" statement%list'

    "+D -(7

    +ilai search%condition dievaluasi. ika bernilai true, maka

    statement%list setelah *0"+ di2alankan. +amun

    2ika bernilai false, maka statement%list pada "LS" yang

    di2alankan. enggunaan banyak kondisi dapat dilakukan dengan

    statement "LS"-(. Berikut adalah contoh penggunaan -(!

    mys1l> delimiter NN

    mys1l> create function hitung;a2i8ga2i Ooat:

    G> returns varchar8F/:

    G> begin

    G> declare bayaran varchar8F/:7

    G> if ga2i PJ///// then set bayaran5;a2i $endah7

    G> else set bayaran5;a2i *inggi7

    G> end if7

    G> return bayaran7

    G> end NN

    Query 3?, / ros aected 8/.// sec:

    mys1l> delimiter 7

    mys1l> select nama%depan, nama%belakang, hitung;a2i8ga2i:

    from peker2a7

  • 8/10/2019 Materi MySQL Part 6

    6/14

    HGGGGGGGGGGGGHGGGGGGGGGGGGGGGHGGGGGGGGGGGGGGGGH

    I nama%depan I nama%belakang I hide;a2i8ga2i: I

    HGGGGGGGGGGGGHGGGGGGGGGGGGGGGHGGGGGGGGGGGGGGGGH

    I ohn I Doe I ;a2i *inggi I

    I Alison I Mathes I ;a2i *inggi I

    I ames I Smith I ;a2i *inggi I

    I #elia I $ice I ;a2i *inggi I

    I $obert I Black I ;a2i *inggi I

    I Linda I ;reen I ;a2i *inggi I

    I David I Larry I ;a2i *inggi I

    I 0ercule I oirot I ;a2i *inggi I

    I Lincoln I $hyme I ;a2i *inggi I

    I Sherlock I 0olmes I ;a2i *inggi I

    HGGGGGGGGGGGGHGGGGGGGGGGGGGGGHGGGGGGGGGGGGGGGGH

    @/ ros in set, C arnings 8/.// sec:

    4.2.2 Kendali CASE

    Sintaks dari kendali #AS" adalah sebagai berikut!

    #AS" case%value

    0"+ hen%value*0"+ statement%list

    &0"+ hen%value*0"+ statement%list' ...

    &"LS" statement%list'

    "+D #AS"

    ada sintaks di atas, case%value dibandingkan dengan semua

    nilai hen%value sampai ditemukan yang sesuai. ika ditemukan,

    maka statement%list pada 0"+ yang bersesuaian akan

    di2alankan. ika tidak ada nilai hen%value yang sesuai, maka

  • 8/10/2019 Materi MySQL Part 6

    7/14

    statement%list pada "LS" yang di2alankan 82ika ada:. Berikut

    adalah contoh penggunaan #AS"!

    *ambahkan kolom peker2aan

    mys1l> alter table peker2a add peker2aan varchar8C/:7

    Query 3?, @@ ros aected 8/.F@ sec:

    *ambahkan data menggunakan insert

    mys1l> insert into peker2a values8aaa,bbb,C/////,Manager:7

    Query 3?, @ ro aected 8/./C sec:

    mys1l> D"L-M-*"$ RR

    mys1l> #$"A*" ()+#*-3+ calc*a8peker2aan =A$#0A$ 8F/::

    G> $"*)$+S (L3A*8C,F:

    G> B";-+

    G> D"#LA$" ta (L3A*8C,F: D"(A)L* /./67

    G> #AS" peker2aan

    G> 0"+ Manager *0"+ S"* ta 5 /.@7

    G> 0"+ rogrammer *0"+ set ta 5 /./K7

    G> 0"+ *ester *0"+ set ta 5 /./7

    G> "LS" S"* ta 5 /./67

    G> "+D #AS"7

    G> $"*)$+ ta7

    G> "+D RR

    Query 3?, / ros aected 8/./ sec:

    mys1l> delimiter 7

    mys1l> S"L"#* nama%depan, nama%belakang,

    calc*a8peker2aan: ($3M peker2a7

    HGGGGGGGGGGGGHGGGGGGGGGGGHGGGGGGGGGGGGGGGGGGGGGGH

  • 8/10/2019 Materi MySQL Part 6

    8/14

    I nama%depan I nama%belakang I calc*a8description: I

    HGGGGGGGGGGGGHGGGGGGGGGGGHGGGGGGGGGGGGGGGGGGGGGGH

    I ohn I Doe I /./K I

    I Alison I Mathes I /./ I

    I ames I Smith I /./ I

    I #elia I $ice I /.@/ I

    I $obert I Black I /./ I

    I Linda I ;reen I /./ I

    I David I Larry I /.@/ I

    I 0ercule I oirot I /./6 I

    I Lincoln I $hyme I /./6 I

    I Sherlock I 0olmes I /./6 I

    HGGGGGGGGGGGGHGGGGGGGGGGGHGGGGGGGGGGGGGGGGGGGGGGH

    @/ ros in set 8/.// sec:

    Bentuk sintaks dari #AS" yang lain adalah sebagai berikut!

    #AS"

    0"+ search%condition*0"+ statement%list

    &0"+ search%condition*0"+ statement%list' ...

    &"LS" statement%list'

    "+D #AS"

    ada sintaks di atas, search%condition di setiap klausa 0"+

    dievaluasi hingga ditemukan klausa 0"+ yang sesuai. ika tidak

    ada klausa 0"+ yang sesuai, maka klausa "LS" yang

    di2alankan. ika tidak ada klausa "LS" ketika semua klausa 0"+

    tidak sesuai, maka akan ter2adi #ase not found for #AS"

    statement error. Berikut adalah contoh penggunaan sintaks #AS"

    4 0"+ tersebut!

  • 8/10/2019 Materi MySQL Part 6

    9/14

    mys1l> delimiter TT

    mys1l> create function deskripsi8peker2aan varchar8FF6::

    G> returns Ooat8C,F:

    G> begin

    G> declare des Ooat8C,F: default /./67

    G> case peker2aan

    G> hen Manager then set des5/.@7

    G> hen rogramer then set des5/./K7

    G> hen Security then set des5/./7

    G> else set des 5/./67

    G> end case7

    G> return des7

    G> end TT

    Query 3?, / ros aected 8/.// sec:

    mys1l> delimiter 7

    mys1l> select nama%depan, nama%belakang,

    deskripsi8peker2aan: from peker2a7

    HGGGGGGGGGGGGHGGGGGGGGGGGGGGGHGGGGGGGGGGGH

    I nama%depan I nama%belakang I deskripsi I

    HGGGGGGGGGGGGHGGGGGGGGGGGGGGGHGGGGGGGGGGGH

    I ohn I Doe I +)LL I

    I Alison I Mathes I +)LL I

    I ames I Smith I +)LL I

    I #elia I $ice I +)LL I

    I $obert I Black I +)LL I

    I Linda I ;reen I +)LL I

    I David I Larry I +)LL I

    I 0ercule I oirot I +)LL I

  • 8/10/2019 Materi MySQL Part 6

    10/14

    I Lincoln I $hyme I +)LL I

    I Sherlock I 0olmes I +)LL I

    HGGGGGGGGGGGGHGGGGGGGGGGGGGGGHGGGGGGGGGGGH

    @/ ros in set 8/.// sec:

    4.3 Perulangan

    ada function dan procedure 2uga disediakan perulangan.

    Beberapa bentuk perulangan yang disediakan

    dalam MySQL adalah 0-L",$""A* 4 )+*-L, dan L33.

    4.3.1 Perulangan WI!E

    Bentuk sintaks untuk perulangan 0-L" adalah sebagai berikut!

    0-L" search%condition D3

    statement%list

    "+D 0-L"

    Statement%list yang terdapat dalam 0-L" diulang selama

    search%condition bernilai true.

    statement%list terdiri atas satu atau lebih statement SQL, setiap

    statementnya dipisahkan dengan

    delimiter titik koma 87:. Berikut adalah contoh penggunaan

    0-L".

    mys1l> delimiter TT

    mys1l> create procedure mod@F8in number int8@/::

    G> begin

    G> hile number mod @F>/ do

  • 8/10/2019 Materi MySQL Part 6

    11/14

    G> set number 5 number H @7

    G> end hile7

    G> select number7

    G> end TT

    Query 3?, / ros aected 8/.@@ sec:

    mys1l> delimiter 7

    mys1l> call mod@F8@/:7

    HGGGGGGGGH

    I number I

    HGGGGGGGGH

    I @F I

    HGGGGGGGGH

    @ ro in set 8/./6 sec:

    Query 3?, / ros aected 8/./ sec:

    mys1l> call mod@F8FJ:7

    HGGGGGGGGH

    I number I

    HGGGGGGGGH

    I FJ I

    HGGGGGGGGH

    @ ro in set 8/.// sec:

    Query 3?, / ros aected 8/.// sec:

    J.C.F erulangan $""A* 4 )+*-L

    Sintaks dari $""A* )+*-L 4 adalah sebagai berikut!

  • 8/10/2019 Materi MySQL Part 6

    12/14

    $""A*

    statement%list

    )+*-L search%condition

    "+D $""A*

    Statement%list di dalam $""A* dilakukan secara berulang

    hingga ekspresi search%condition bernilai true. 3leh karena itu,

    sebuah $""A* memasuki perulangan paling sedikit sebanyak

    satu kali. statment%list terdiri atas satu atau lebih statement,

    masingGmasing dipisah dengan delimiter titik koma 87:. Berikut

    adalah contoh penggunaan $""A* 4 )+*-L.

    mys1l> delimiter

    mys1l> create procedure repeatDemo8in number int8@/::

    G> begin

    G> repeat

    G> set number 5 number H @7

    G> until number mod @/ 5 /

    G> end repeat7

    G> select number7

    G> end TT

    Query 3?, / ros aected 8/.// sec:

    mys1l> delimiter 7

    mys1l> call repeatDemo8@J:7

    HGGGGGGGGH

    I number I

    HGGGGGGGGH

    I F/ I

    HGGGGGGGGH

    @ ro in set 8/.// sec:

  • 8/10/2019 Materi MySQL Part 6

    13/14

    Query 3?, / ros aected 8/./@ sec:

    4.3.3 Perulangan !""P

    Sintaks dari perulangan L33 adalah sebagai berikut!

    &begin%label!' L33

    statement%list

    "+D L33 &end%label'

    L33 merupakan bentuk perulangan sederhana. erulangan

    dilakukan terhadap statement%list, yang terdiri atas beberapa

    statement dengan dipisahkan oleh tanda titik koma 87:.

    Statement di dalam L33 diulang sampai L33 berakhir. #ara

    mengakhiri L33 biasanya dilakukan dengan statement L"A=".

    *anda perulangan dilakukan menggunakan -*"$A*". Berikut

    adalah contoh penggunaan L33.

    mys1l> delimiter TT

    mys1l> create procedure iterateDemo8number int:

    G> begin

    G> label@! loop

    G> set number 5 number H @7

    G> if number mod K>/ then

    G> iterate label@7

    G> end if7

    G> leave label@7

    G> end loop label@7

    G> select number7

    G> end TT

  • 8/10/2019 Materi MySQL Part 6

    14/14

    Query 3?, / ros aected 8/.// sec:

    mys1l> delimiter 7

    mys1l> call iterateDemo8@/:7

    HGGGGGGGGH

    I number I

    HGGGGGGGGH

    I @J I

    HGGGGGGGGH

    @ ro in set 8/.// sec:

    Query 3?, / ros aected 8/./F sec:

    mys1l> call iterateDemo8F/:7

    HGGGGGGGGH

    I number I

    HGGGGGGGGH

    I FF I

    HGGGGGGGGH

    @ ro in set 8/.// sec:

    Query 3?, / ros aected 8/./F sec: