Memperkenalkan PL / SQL Cursor
Ketika kamu bekerja dengan database Oracle, kamu bekerja dengan satu set baris lengkap yang dikembalikan dari sebuah pernyataan SELECT.
Namun aplikasi dalam beberapa kasus tidak dapat bekerja secara efektif dengan keseluruhan rangkaian hasil, oleh karena itu, server basis data perlu menyediakan mekanisme agar aplikasi dapat bekerja dengan satu baris atau subset dari hasil yang ditetapkan pada satu waktu.
Akibatnya, Oracle membuat kursor PL / SQL untuk menyediakan ekstensi ini.
Cursor PL / SQL adalah pointer yang menunjukkan hasil query SQL terhadap tabel database.
Bekerja dengan Cursor PL / SQL
Gambar berikut menjelaskan langkah-langkah yang perlu Anda ikuti saat Anda bekerja dengan cursor PL / SQL:
Mari kita periksa setiap langkah secara lebih rinci.
Mendeklarasikan PL / SQL Cursor
Untuk menggunakan kursor PL / SQL, pertama-tama kamu harus mendeklarasikannya di bagian deklarasi blok PL / SQL atau dalam sebuah paket sebagai berikut:
CURSOR cursor_name [ ( [ parameter_1 [, parameter_2 ...] ) ]
[ RETURN return_specification ]
IS sql_select_statements
[FOR UPDATE [OF [column_list]];
- Pertama, kamu menyatakan nama cursor cursor_name setelah kata kunci cursor. Nama cursor bisa memiliki panjang hingga 30 karakter dan mengikuti aturan penamaan pengenal di PL / SQL. Penting untuk dicatat bahwa nama cursor bukan variabel sehingga Anda tidak dapat menggunakannya sebagai variabel seperti menugaskannya ke cursor lain atau menggunakannya dalam sebuah ekspresi. Parameter1, parameter2 ... adalah elemen opsional dalam deklarasi cursor. Parameter ini memungkinkan Anda untuk melewatkan argumen ke cursor. RETURN return_specification juga merupakan bagian opsional.
- Kedua, kamu menentukan pernyataan SQL yang valid yang mengembalikan kumpulan hasil yang akan ditunjukkan cursor.
- Ketiga, kamu bisa menunjukkan daftar kolom yang ingin kamu update setelah FOR UPDATE OF. Bagian ini bersifat opsional sehingga kamu bisa menghilangkannya dalam deklarasi CURSOR.
Berikut adalah contoh untuk mendeklarasikan cursor:
CURSOR cur_chief
IS
SELECT
first_name, last_name, department_name
FROM
employees e
INNER JOIN departments d ON d.manager_id = e.employee_id;
Kami mengambil data dari tabel karyawan dan departemen menggunakan klausa SELECT with the INNER JOIN dan menetapkan kursor cur_chief ke set hasil ini.
Membuka Cursor PL / SQL
Setelah mendeklarasikan Cursor, kamu bisa membukanya dengan menggunakan sintaks berikut:
OPEN cursor_name [(argument_1 [, argument_2 ...])];
Kamu harus menentukan nama cursor cursor_name setelah kata kunci OPEN. Jika cursor didefinisikan dengan daftar parameter, kamu harus melewati argumen yang sesuai ke cursor.
Ketika kamu melakukan OPEN cursor, PL / SQL mengeksekusi pernyataan SELECT dan mengidentifikasi set hasil aktif. Perhatikan bahwa OPEN action sebenarnya tidak mengambil catatan dari database. Itu terjadi di FETCH step. Jika cursor dinyatakan dengan klausa FOR UPDATE, PL / SQL mengunci semua record pada set hasil.
Kita bisa membuka cur_chief cursor sebagai berikut:
OPEN cur_chief;
Fetching Records dari kursor PL / SQL
Setelah cursor terbuka, kamu dapat mengambil data dari cursor ke dalam record yang memiliki struktur yang sama seperti cursor. Alih-alih mengambil data menjadi catatan, kamu juga dapat mengambil data dari cursor ke daftar variabel.
Tindakan mengambil mengambil data dan mengisi catatan atau daftar variabel. Kamu bisa memanipulasi data ini di memori. Kamu bisa mengambil data sampai tidak ada catatan yang ditemukan di set hasil aktif.
Sintaksis FETCH sebagai berikut:
FETCH cursor_name INTO record or variables
Kamu dapat menguji atribut kursor % FOUND atau % NOTFOUND untuk memeriksa apakah pengambilan terhadap cursor berhasil dilakukan. Cursor memiliki lebih banyak atribut yang akan kita bahas di bagian selanjutnya.
Kita bisa menggunakan pernyataan PL / SQL LOOP bersamaan dengan loop FETCHto melalui semua record dalam hasil aktif yang ditetapkan sebagai berikut:
LOOP
-- fetch information from cursor into record
FETCH cur_chief INTO r_chief;
EXIT WHEN cur_chief%NOTFOUND;
-- print department - chief
DBMS_OUTPUT.PUT_LINE(r_chief.department_name || ' - ' ||
r_chief.first_name || ',' ||
r_chief.last_name);
END LOOP;
Closing PL/SQL Cursor
Kamu harus selalu menutup kursor saat tidak lagi digunakan. Jika tidak, kamu akan memiliki kebocoran memori dalam program , yang tidak diharapkan.
Untuk menutup cursor, kamumenggunakan CLOSE statement sebagai berikut:
CLOSE cursor_name;
Dan inilah contoh penutupan cursor cur_chief:
CLOSE cur_chief;
Contoh Cursor PL / SQL yang lengkap
Berikut ini adalah contoh lengkap dari cursor untuk mencetak daftar kepala dan nama departemen sebagai berikut:
SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
-- declare a cursor
CURSOR cur_chief IS
SELECT first_name,
last_name,
department_name
FROM employees e
INNER JOIN departments d ON d.manager_id = e.employee_id;
r_chief cur_chief%ROWTYPE;
BEGIN
OPEN cur_chief;
LOOP
-- fetch information from cursor into record
FETCH cur_chief INTO r_chief;
EXIT WHEN cur_chief%NOTFOUND;
-- print department - chief
DBMS_OUTPUT.PUT_LINE(r_chief.department_name || ' - ' ||
r_chief.first_name || ',' ||
r_chief.last_name);
END LOOP;
-- close cursor cur_chief
CLOSE cur_chief;
END;
/
Atribut Cursor PL / SQL
Ini adalah atribut utama dari cursor PL / SQL dan deskripsi mereka.
Atribut: cursor_name % FOUND
Deskripsi: kembali TRUE jika record berhasil diambil oleh cursor cursor_name
Atribut : cursor_name% NOTFOUND
Deskripsi: kembali TRUE jika record tidak diambil berhasil oleh cursor cursor_name
Atribut: cursor_name% ROWCOUNT
Deskripsi: mengembalikan jumlah record yang diambil dari kursor cursor_name saat kita menguji % ROWCOUNT attribute
Atribut: cursor_name% ISOPEN
Deskripsi: mengembalikan TRUE jika cursor cursor_name terbuka
Dalam tutorial ini, kamu telah belajar bagaimana menggunakan cursor PL / SQL untuk melewati satu set baris dengan semua langkah penting yang perlu dilakukan termasuk DECLARE, OPEN, FETCH dan CLOSE.
Sumber : http://www.plsqltutorial.com
0 comments:
Post a Comment