Sunday, July 12, 2009

CURSOR Store Procedure MySQL

Pernah-kah terpikir untuk menyimpan hasil dari sebuah query ke sebuah varibel, kemudian mengeluarkannya untuk menjadi
filter di query yg lain atau untuk kebutuhan yg lain.

kayaknya akan lebih terbayang maksudnya kalau dgn contoh, di bawah ini contoh nya,

store procedure di bawah ini adalah membuat siswa yg status sudah di hapus (is_delete=1) pada table siswa diubah menjadi status nya tidak di hapus (is_delete=0)

KITA MULAI
PROCEDURE sp_update_status_siswa()
BEGIN

DECLARE done INT DEFAULT 0;
DECLARE v_nisn varchar(255) default '';

DECLARE cur1 CURSOR FOR select nisn from tbl_siswa where is_delete=1;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

OPEN cur1;
REPEAT
FETCH cur1 INTO v_nisn;
IF NOT done THEN
update tbl_siswa set is_delete=0
where nisn = v_nisn;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;

END
penjelasannya:
  1. DECLARE done INT DEFAULT 0; -> mendefinisikan varibel untuk menyimpan status dari cursor
  2. DECLARE v_nisn varchar(255) default ''; -> membuat variabel untuk nisn dari table siswa
  3. DECLARE cur1 CURSOR FOR select nisn from tbl_siswa where is_delete=1; -> membuat CURSOR dgn nama CUR1 untuk menyimpan hasil query
  4. DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; -> untuk menghandle bila hasil looping CUR1 habis maka variabel done di set 1
  5. OPEN cur1; -> membuka CURSOR cur1
  6. FETCH cur1 INTO v_nisn; -> memasukan hasil field pertama (nisn) dari cursor ke varibel v_nisn
  7. IF NOT done THEN -> bila varibel done masih bernilai 0 maka eksekusi query di bawah nya
  8. UNTIL done END REPEAT; -> pengulangan berakhir bila variabel done sama dengan satu
  9. CLOSE cur1; -> menutup CURSOR cur1

7 comments:

  1. wah bagus banget gan ini yang dicari ma ane ..

    ReplyDelete
  2. alhamdullilah kalau bermanfaa :)

    ReplyDelete
  3. Keren mas Dendie, sangat membantu. Boleh saya link ke blog saya di http://wijayatony.wordpress.com?

    ReplyDelete
  4. makasih... silakan di linkkan mas..

    ReplyDelete
  5. makasi banyak sangat membantu

    ReplyDelete
  6. kak kalau misalnya ingin menampilkan 'Data Tidak Ditemukan' ketika masih 0 gimana kak?

    ReplyDelete