1 1. Pendahuluan Dalam pertemuan sekarang kita akan membahas mengenai objek prosedur yang terdapat di database, biasanya dipanggil dengan sebuatan sto...
1. Pendahuluan Dalam pertemuan sekarang kita akan membahas mengenai objek prosedur yang terdapat di database, biasanya dipanggil dengan sebuatan store procedure atau prosedur database. Kita mulai dengan apa yang dimaksud dengan /definisi store procedure. Store procedure ialah Penyimpanan suatu kumpulan kode (procedure) yang terdiri dari deklarasi dan prosedur perintah SQL dalam katalog database dan dapat diaktifkan/ digunakan dengan cara memanggil melalui suatu program, suatu trigger, dan store procedure lainnya. Jadi, store procedure merupakan suatu kumpulan kode. Kode ini bisa terdiri dari deklarasi perintah SQL , seperti CREATE, UPDATE, dan SELECT, mungkin saja ditambahkan perintah‐perintah prosedural, seperti IF‐THEN‐ELSE, WHILE‐ DO. Yang mana kode akan disimpan dan buat menjadi suatu Strore Procedure, oleh karena itu, kode‐kode yang dibuat bukan bagian dari program, melainkan, disimpan dalam suatu katalog. Pengaktifan/ pemanggilan store procedure dapat disamakan dengan pemanggilan prosedur dalam bahasa prosedural. Dalam memanggil suatu store procedure, pertamakali kita membuat suatu perintah SQL baru. Dimana pemanggilan store procedure, anda bisa menetukan parameter input ataupun output. Sebagai tamahan dalam pendefisian store procedure. Pemanggilan store procedure dapat dilakukan dalam store procedure lainnya. Kita coba ilustrasikan dan praktekan store procedure dengan contoh yang sederhana.
Contoh 3.1: Membuat suatu store procedure supaya menghapus semua pertandingan pemain berdasarkan nomor pemain yang ditentukan. CREATE PROCEDURE `DELETE_MATCHES` (IN `P_PLAYERNO` INTEGER) BEGIN DELETE FROM `MATCHES` WHERE `PLAYERNO` = `P_PLAYERNO`; END
Setiap store procedure terdiri dari 3 bagian, yaitu sebuah daftar paramenter, sebuah Body, dan sebuah nama. Dalam prosedur diatas hanya terdapat satu parameter, yaitu P_PLAYERNO (Nomor pemain). Kata IN dalam parameter menyatakan parameter input. Nilai dalam parameter tersebut akan digunakan dalam prosedur, kecuali setelah procedur tersebut dieksekusi, variabel yang digunakan saat pemanggilan tetap tidak mengalami perubahan. Penempatan/ penentuan body prosedur, dilakukan antara Keyword BEGIN dan END. dalam contoh diatas, body prosedur masih mudah karena masih terdiri dari satu perintah DELETE. Sesuatu yang baru dalam perintah diatas ialah penggunaan parameter P_PLAYERNO. Nama prosedur sama seperti pada database haruslah unik , Bisa saja namanya sama seperti nama table‐table yang terdapat pada database yang besangkutan. Hasil dari pembuatan prosedur diatas ialah tidak mengeksekusi perintah DELETE, syntax yang terdapat dalam perintah diatas hanya membandingkan, jika syntax tersebut telah sesuai dengan yang disimpan dalam catalog. Untuk mengaktifkan suatu store procedure, dengan menggunakan perintah CALL. Contoh 3.2: Membuang semua pertandingan pemain dengan nomor 8 menggunakan prosedur DELETE_MATCHES. CALL `DELETE_MATCHES` (8);
Gambar 3.1 memperlihatkan bagaimana sebuah store procedure diproses. Pada blok kiri mempresentasikan dimana program suatu prosedur. Blok tengah mempresentasikan database server, dan yang kanan mempresentasikan
Procedural Database Objects : Store Procedure
| 1
MODUL 3 SISTEM BASIS DATA PROCEDURAL DATABASE OBJECTS : STORE PROCEDURE E-mail Author :
database dan katalog. Proses awal dimulai dengan pemanggilan prosedur oleh program(Langkah 1). Database server menerima pemanggilan tersebut dan mencari procedure yang sesuai didalam catalog(Step 2). Selanjutnya, prosedure tersebut dieksekusi(langkah 3). Prosedur tersebut mehasilkan suatu menambahkan baris baru, atau dalam kasus yang contohkan, kita membuang suatu baris. Ketika prosedur berhasil sudah selesai, maka prosedur akan mengembalikan suatu nilai/hasil.
Gambar 3. 1 Langkah‐langkah pemprosesan Store Procedure
2. Parameter Dalam Sebuah Store Procedure Suatu Store Procedure memiliki kosong, 1, atau lebih parameter. Melalui parameter suatu prosedur dapat berkomunikasi dengan dunia luar. Ada tiga tipe parameter yang dapat digunakan. Dengan parameter input, data/ nilai darai parameter inputan dapat digunakan dalam strore prosedur. Sebagi contoh dapat dilihat pada contoh 3.1 yang berisikan satu parameter input, paramenter tersebut menujukan nomor permain mana dalam pertadingan yang akan dibuang. Store prosedur dapat menggunakan parameter output untuk menampung hasil yang akan dikembalikan/ nilai yang didapatkan dalam proses yang terdapat di dalam prosedur. Sebagai contoh kita lihat contoh kasus 3.3, store procedure ini dibuat untuk mencari nama pemain, hasil dari pencarian tersbut akan disimpan dalam parameter out. Tipe ketiga ialah parameter input/output parameter. Sesuai dengan namanya, parameter ini dapat digunakan sama halnya dengan parameter input atau output. Contoh 3.3: Membuat suatu strore procedure untuk mencari nama pemain dan nama pemain tersebut disimpan dalam parameter output. CREATE PROCEDURE `SELECT_PLAYERNAME`(OUT `P_NAME` VARCHAR(60), IN `P_PLAYERNO` INT) BEGIN SELECT `NAME` INTO `P_NAME` FROM `PLAYERS` WHERE `PLAYERNO` = `P_PLAYERNO`; END
Contoh 3.4: Membuat suatu strore procedure supaya mengenerate nomor sesuai dengan algoritma FIBONACCI. CREATE PROCEDURE `FIBONACCI` (INOUT `NUMBER1` INTEGER, INOUT `NUMBER2` INTEGER, INOUT `NUMBER3` INTEGER) BEGIN SET `NUMBER3` = `NUMBER1` + `NUMBER2`; IF `NUMBER3` > 10000 THEN SET `NUMBER3` = `NUMBER3` - 10000; END IF; SET `NUMBER1` = `NUMBER2`; SET `NUMBER2` = `NUMBER3`;
Procedural Database Objects : Store Procedure
| 2
MODUL 3 SISTEM BASIS DATA PROCEDURAL DATABASE OBJECTS : STORE PROCEDURE E-mail Author :
Sebuah store procedure bisa saja tak membutuhkan suatu parameter, akan tetapi tanda kurung pembuka dan penutup haruslah ada. Pembuatan nama untuk parameter tidak boleh sama dengan nama kolom. Jika kita merubah P_PLAYERNO dalam contoh kasus 3.1 dengan PLAYERNO, MySQL tidak akan menghasilkan pesan error, perintah DELETE akan mengagap PLAYERNO yang kedua diaggap sebagai nama kolom, bukan nama parameter. Alhasil, pemanggilan prosedur, store procedure akan menghapus semua pemain. 3. Body dalam sebuah Store Procedure Body dalam sebuah store procedure berisikan semua perintah yang akan dieksekusi ketika store procedure itu di panggil. Suatu body diawali dengan keyword BEGIN dan diakhiri dengan keyword END. Diantara, semua perintah kita dapat mentetukan tipe dari perintah tersebut. Kita sudah mempelajari perintah SQL pada pertemuan sebelumnya(seperti, perintah DML, DCL, dan DDL). Dan strore procedure dapat menggunakan semua itu. Store procedure juga dapat menggunakan perintah dalam bahasa pemograman lainnya, seperti IF‐THEN‐ELSE, WHILE‐DO, REPEAT‐UNTIL. Tambahannya, kita dapat menyimpan hasil dari perintah SELECT dengan menggunakan perintah khusus yaitu perintah INTO, dapat mendeklarasikan variabel lokal, dan dapat menentukan nilainnya. Dengan sebuah blok BEGIN‐END. Suatu perintah dapat dikelompokan menjadi sebuah perintah. Dalam kesempatan lain blok akan dipanggila dengan perintah COUMPOUND. Dalam faktanya, body store prosedur merupakan suatu blok BEGIN‐END(perintah COUMPOUND). Blok bisa saja bersarang, dengan kata lain kita dapat membuat suatu subblok dalam blok BEGIN‐END. Dan hal tersebut diperbolehkan dalam store procedure : BEGIN BEGIN BEGIN END; END; END;
Catatan untuk setiap perintah yang termasuk didialam blok BEGIN‐END harus diakhiri dengan semicolon. Itu dibutukan untuk menunjukan akhir body dalam store procedure. Kita dapat menambahkan suatu Label untuk blok BEGIN‐END. Contohnya. BLOK1: BEGIN BLOK2: BEGIN BLOK3: BEGIN END BLOK1; END BLOK2; END BLOK3;
Ada dua keuntungan yang didapatkan saat menggunakan Label. Pertama, pelabelan dapat mempermudah menentukan sampai sejauh mana BEGIN dan END‐nya. Khsusunya saat dalam suatu store procedure terdapat banyak prosedur. Kedua, beberapa perintah SQL seperti LEAVE, dan ITERATION(Pengulangan) membutuhkan hal tersebut. Mengenai perintah SQL LEAVE dan ITERATION akan dibahas dalam kesempatan lain. 4. Variabel lokal Dalam sebuah store procedure, variabel lokal dapat dideklarasikan. Variabel tersebut dapat digunakan untuk penyimpanan sementara dari hasil yang dihasilkan. Jika kita membutuhkan suatu variabel lokal dalam store procedure. Langkah awalnya mendeklarasikannya dengan menggunakan perintah DECLARE. Apabila anda sudah mempelajari
Procedural Database Objects : Store Procedure
| 3
MODUL 3 SISTEM BASIS DATA PROCEDURAL DATABASE OBJECTS : STORE PROCEDURE E-mail Author :
pemograman dalam bahasa PHP, pendekalarsian variabel lokal mirip dengan pendeklarasian suatu variabel pada pemograman dalam bahasa PHP. Dengan mendeklarasikannya terlebih dahulu. Kita dapat menetukan tipe data dari variabel yang bersangkutan dan menginisialisasinya sesuai kebuuhan kita. Tipe data yang dapat didukung, mungkin saja sama dengan tipe data saat kita menggunakan dalam perintah CREATE TABLE Contoh 3.5: Mendeklarasikan sebuah variabel numeric dan alpanumerik. DECLARE `NUM1` DECIMAL(7,2); DECLARE `ALPHA` VARCHAR(20);
Banyak variabel boleh saja memiliki tipe yang sama dalam dengan satu kali pendeklarasi dengan menggunkan perintah DECLARE. Contoh 3.6: Mendeklarasikan dua variabel integer. DECLARE `NUMBER1`, `NUMBER2 ` INTEGER;
Penambahan sebuah ekpresi DEFAULT memberikan suatu nilai awal(inisialisasi) bagi variabel. Contoh 3.7: Buat suatu store procedure dimana didalamnya terdapat inisialisi sebuah nilai yang disimpan dalam variabel lokal. Selajutnya, anda panggil strore procedure tersebut. CREATE PROCEDURE `TEST` (OUT `NUMBER1` INTEGER) BEGIN DECLARE `NUMBER2` INTEGER DEFAULT 100; SET `NUMBER1` = `NUMBER2`; END; CALL `TEST` (@NUMBER); SELECT @NUMBER;
Hasilnya: @NUMBER ‐‐‐‐‐‐‐ 100 Nilai default untuk ekpresi DEFAULT tidak hanya terbahas pada literal saja, tetapi mungkin saja berupa ekspresi coumpound, subquery. Contoh 3.8: Buat sebuah store procedure dimana inisialisasi variabel lokal diambil dari nomor pemain yang terdapat di tabel PLATERS. CREATE PROCEDURE `TEST` (OUT `NUMBER1` INTEGER) BEGIN DECLARE `NUMBER2` INTEGER; DEFAULT (SELECT COUNT(*) FROM `PLAYERS`); SET `NUMBER1` = `NUMBER2`; END;
Pendeklarasian variabel dapat dilakukan seperti dalam blok BEGIN‐END. Setelah dideklarasikan, suatu variabel dapat digunakan pada blok yang bersangkutan, termasuk semua subblok dari blok tersebut. Variabel yang dideklarasikan dalam suatu blok tidak akan bisa/ tidak akan dikenali dalam blok lainnya.
Procedural Database Objects : Store Procedure
| 4
MODUL 3 SISTEM BASIS DATA PROCEDURAL DATABASE OBJECTS : STORE PROCEDURE E-mail Author :
B1 : BEGIN DECLARE V1 INTEGER; B2 : BEGIN DECLARE V2 INTEGER; SET V2 = 1; SET V1 = V2; END B2; B3 : BEGIN SET V1 = V2; END B3; SET V2 = 100; END B1;
Lihat pendeklarasian variabel diatas, variabel dengan nama V1 akan bisa saja digunakan dalam semua blok. V2, hanya bisa digunakan pada sublok pertama atau yang dikelan dengan B2. Dalam subblok selanjutnya, variabel yang digunakan tidak kitehaui atau dikenali, perintah SET pada blok ini akan ditolak. Begitupun dengan perintah SET yang terakhir tidak akan bisa diterima/ ditolak. Jangan terkecoh variabel lokal dan user variabel pada dasarnya kedua variabel ini berbeda, dalam modul pertama yang membahas mengenai common element. Kita sudah bahas mengenai user variabel, perbedaan yang pertama adalah pendefinisian nama variabel variabel lokal tidak menggunakan tanda/lambang @ didepan nama variabel. Perbedaan lainnya user variabel akan selalu ada selama session masih digunakan. Variabel lokal akan segera menghilang setelah memproses blok BEGIN‐END yang mana setelah pendeklarasinya selesai. User variabel dapat digunakan didalam dan diluar store procedure. Sedangkan variabel lokal tidak bisa digunakan diluar store procedure. Catatan bahwa MySQL tidak mendukung array sebagai variabel lokal. 5. Perintah SET Dalam modul pertama yang membahas mengenai common element, Kita sudah bahas bagiaman kita memasukan suatu nilai untuk user variabel dengan menggunkan perintah SET. Perintah yang sama dapat digunakan untuk memasukan suatu nilai untuk variabel lokal. Dalam bagian‐bagian sebelumnya diperlihatkan beberapa contoh dengan menggunakan perintah SET. Mari kita perikasa contoh dibawah ini : SET VAR1 = 1; SET VAR1 := 1; SET VAR1 = 1, VAR2 = VAR1;
Dalam contoh terakhir diatas, pertama suatu nilai disimpan dalam variabel VAR1, dan selajutnya nilai tersebut disimpan pada variabel VAR2 memalui VAR1. 6. Perintah FLOW‐CONTROLS Kita sudah tahu bahwa perintah prosedural dapat digunakan dalam body store procedure. PENDEFINISIAN ::= | | <while statement> | | | | ::= IF THEN <statement list> [ ELSEIF THEN <statement list> ]... [ ELSE <statement list> ] END IF
Procedural Database Objects : Store Procedure
| 5
MODUL 3 SISTEM BASIS DATA PROCEDURAL DATABASE OBJECTS : STORE PROCEDURE E-mail Author :
::= { CASE <scalar expression> WHEN <scalar expression> THEN <statement list> [ WHEN <scalar expression> THEN <statement list> ]... [ ELSE <statement list> ] END CASE } | { CASE WHEN THEN <statement list> [ WHEN THEN <statement list> ]... [ ELSE <statement list> END CASE } <while statement> ::= [