
Tutorial ini akan memberi Anda perincian singkat tentang useran kursor MySQL dalam prosedur tersimpan, fungsi tersimpan, atau pemicu untuk menjalankan hasil dari pernyataan SELECT.
Dalam kebanyakan kasus, saat menjalankan kueri SQL menggunakan shell MySQL atau meja kerja MySQL, kami tidak menyimpan hasilnya, meskipun kami memiliki fungsi untuk menyimpan hasil yang diproses oleh server menggunakan prosedur tersimpan.
Dalam tutorial ini, saya tidak akan membahas prosedur tersimpan, fungsi, atau pemicu. Sebagai gantinya, saya hanya akan menunjukkan kepada Anda bagaimana Anda dapat menggunakan kursor MySQL untuk menjalankan hasil dalam prosedur tersimpan.
Sebelum kita mulai membuat dan menggunakan kursor dengan contoh, mari kita luangkan waktu sejenak untuk membahas beberapa poin penting tentang kursor yang harus Anda ketahui:
Fitur dari Kursor MySQL
- Kursor bersifat baca-saja dan tidak dapat memperbarui atau menghapus data dalam kumpulan hasil dari prosedur.
- Kursor perlu dideklarasikan sebelum dapat digunakan. Definisi kursor hanyalah langkah untuk memberi tahu MySQL bahwa kursor seperti itu ada dan tidak mengambil dan data.
- Anda hanya dapat mengambil data dalam urutan yang ditentukan oleh pernyataan pilih dan tidak dalam urutan terbalik apa pun, umumnya dikenal sebagai tidak dapat digulir.
- Anda menggunakan kursor dengan membukanya dan kemudian melakukan operasi pengambilan pada data yang disimpan.
- Anda harus menutup kursor setelah operasi pengambilan selesai.
Sekarang setelah kita mengetahui apa arti kursor, kita dapat mulai mengilustrasikan cara kerjanya menggunakan contoh dunia nyata:
Penggunaan Dasar
Sintaks umum untuk mendeklarasikan kursor di MySQL sangat mudah. Kita mulai dengan menggunakan kata kunci DECLARE seperti yang ditunjukkan dalam contoh kueri di bawah ini:
Cara Mendeklarasikan Kursor
DECLARE cursor_name CURSOR FOR SELECT_expression;
Nama_kursor adalah nama yang diberikan kepada kursor selama deklarasi. Perhatikan bahwa deklarasi kursor harus setelah variabel yang dideklarasikan untuk mencegah MySQL menghasilkan error.
Berikutnya adalah SELECT_expression, yang menyimpan pernyataan SELECT yang terkait dengan kursor.
Cara Membuka Kursor
Setelah kursor dinyatakan dan MySQL menyadari bahwa kursor ada, kita dapat mulai menggunakannya yang mengharuskan kursor dibuka.
Sintaks umum untuk membuka kursor adalah seperti yang ditunjukkan pada kueri di bawah ini:
OPEN cursor_name;
Perintah ini membuka kursor yang dirujuk oleh namanya dan seseorang dapat mulai menggunakannya.
Cara Mengambil Data
Membuka kursor memungkinkan Anda mengambil informasi yang disimpan dalam prosedur, fungsi, atau pemicu.
Sintaks umum untuk mengambil data menggunakan kursor adalah seperti yang ditunjukkan:
FETCH cursor_name INTO variables;
CATATAN : Seperti yang disebutkan, pastikan kursor digunakan setelah variabel dideklarasikan untuk menghindari error.
Cara Menutup dan Melepaskan Kursor
Setelah operasi yang membutuhkan kursor yang ditentukan selesai, yang terbaik adalah menutup kursor yang membebaskan memori yang terkait dengannya.
Setelah kursor ditutup, user perlu membuka kembali kursor menggunakan kata kunci OPEN (ditampilkan di atas) sebelum menggunakan kursor.
Anda tidak perlu mendeklarasikan kursor setelah pernyataan tutup.
Sintaks umum untuk menutup kursor adalah seperti yang ditunjukkan pada kueri di bawah ini:
CLOSE cursor_name;
Penanganan Error
Kursor MySQL bekerja dengan membaca baris berikutnya secara rekursif di kumpulan hasil. Jika baris berikutnya tidak tersedia, kursor akan menutup dan tidak mengembalikan data kecuali ditentukan. Ini bisa menjadi masalah terutama setelah kursor mencapai hasil akhir.
Sebagai solusi, penangan NOT FOUND didefinisikan. Ini menentukan tindakan yang akan diambil jika baris berikutnya tidak ditemukan.
Sintaks umum untuk penanganan error saat menggunakan kursor adalah:
DECLARE CONTINUE HANDLER NOT FOUND SET terminate = true;
Nilai terminasi adalah varia
bel yang digunakan untuk menentukan bahwa kursor telah mencapai akhir hasil. Nama variabel dapat berupa nama apa saja asalkan sesuai dengan konvensi penamaan variabel MySQL.
CATATAN : Seperti semua variabel yang digunakan dalam kursor, itu harus didefinisikan sebelum digunakan dalam kursor.
Contoh Kasus Penggunaan
Mari kita buat kursor yang mengumpulkan email pelanggan yang tersedia di tabel pelanggan dari database sampel Sakila.
Sumber daya untuk mengdownload dan menginstal database Sakila ada di bawah ini:
https://dev.mysql.com/doc/sakila/en/
Berikut ini mengilustrasikan prosedur yang menggunakan kursor untuk mengambil email:
USE sakila;
DELIMITER $$
CREATE PROCEDURE createNewsletter(
INOUT emails VARCHAR(4000)
)
BEGIN
DECLARE terminate INT DEFAULT FALSE;
DECLARE emailAddr VARCHAR(255) DEFAULT "";
DECLARE collect_email CURSOR FOR SELECT email FROM sakila.customer WHERE (address_id > 100 AND address_id < 200);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET terminate = TRUE;
OPEN collect_email;
getEmails: LOOP
FETCH collect_email INTO emailAddr;
IF terminate = TRUE THEN
LEAVE getEmails;
END IF;
SET emails = CONCAT(emailAddr, "|", emails);
END LOOP getEmails;
CLOSE collect_email;
END$$
DELIMITER ;
SET @emails = "";
CALL createNewsLetter(@collect_email);
SELECT @collect_email;
Setelah kueri dijalankan, Anda akan mendapatkan output seperti yang ditunjukkan di bawah ini:
Kesimpulan
Dalam tutorial ini, kami menggunakan kursor MySQL untuk mengurai data yang disimpan dalam kumpulan hasil. Pertimbangkan dokumentasi untuk menguasai cara mengimplementasikan kursor.