Oracle Kursor PL/SQL: Implisit, Eksplisit, For Loop dengan Contoh
โก Ringkasan Cerdas
Kursor di Oracle PL/SQL adalah penunjuk ke area konteks yang menyimpan baris yang dikembalikan oleh pernyataan SQL. Ada dua jenis: kursor implisit, yang dibuat secara otomatis untuk DML, dan kursor eksplisit, yang dideklarasikan dan dikendalikan oleh programmer.

Apa itu KURSOR di PL/SQL?
Kursor adalah penunjuk ke area konteks. Oracle menciptakan area konteks untuk memproses sebuah SQL pernyataan, dan area ini berisi semua informasi tentang pernyataan tersebut.
PL / SQL Memungkinkan programmer untuk mengontrol area konteks melalui kursor. Kursor menyimpan baris yang dikembalikan oleh pernyataan SQL, dan kumpulan baris yang dipegang kursor disebut sebagai himpunan aktif. Kursor ini juga dapat diberi nama sehingga dapat dirujuk dari tempat lain dalam kode.
Kursor ada dua jenis:
- Kursor Tersirat
- Kursor Eksplisit
Kursor Tersirat
Kapan pun Operasi DML Ketika suatu operasi terjadi di dalam basis data, kursor implisit akan dibuat yang menyimpan baris-baris yang terpengaruh dalam operasi tertentu tersebut. Kursor ini tidak dapat diberi nama dan, oleh karena itu, tidak dapat dikontrol atau dirujuk dari tempat lain dalam kode. Kita hanya dapat merujuk ke kursor terbaru melalui atribut kursor.
Kursor Eksplisit
Pemrogram diperbolehkan membuat area konteks bernama untuk mengeksekusi operasi DML mereka dan mendapatkan kontrol lebih besar atasnya. Kursor eksplisit harus didefinisikan di bagian deklarasi. blok PL/SQL, dan ini dibuat untuk pernyataan SELECT yang perlu digunakan dalam kode.
Berikut adalah langkah-langkah yang terlibat dalam bekerja dengan kursor eksplisit:
- Mendeklarasikan kursor: Mendeklarasikan kursor berarti membuat satu area konteks bernama untuk pernyataan SELECT yang didefinisikan di bagian deklarasi. Nama area konteks ini sama dengan nama kursor.
- Membuka kursor: Membuka kursor memberi tahu PL/SQL untuk mengalokasikan memori untuk kursor ini. Ini membuat kursor siap untuk mengambil data.
- Mengambil data dari kursor: Dalam proses ini, pernyataan SELECT dieksekusi dan baris yang diambil disimpan dalam memori yang dialokasikan. Ini sekarang disebut set aktif. Mengambil data dari kursor adalah aktivitas tingkat record, yang berarti kita dapat mengakses data secara record demi record. Setiap pernyataan pengambilan mengambil satu set aktif dan menyimpan informasi dari record tertentu tersebut. Pernyataan ini sama dengan pernyataan SELECT yang mengambil record dan menetapkannya ke variabel dalam klausa INTO, tetapi tidak akan menimbulkan pengecualian. pengecualian.
- Menutup kursor: Setelah semua data diambil, kita perlu menutup kursor agar memori yang dialokasikan untuk area konteks ini dibebaskan.
Sintaksis
DECLARE CURSOR <cursor_name> IS <SELECT statement>; <cursor_variable declaration>; BEGIN OPEN <cursor_name>; FETCH <cursor_name> INTO <cursor_variable>; . . CLOSE <cursor_name>; END;
Dalam sintaks di atas, bagian deklarasi berisi deklarasi kursor dan variabel kursor tempat data yang diambil akan ditetapkan. Kursor dibuat untuk pernyataan SELECT yang diberikan dalam deklarasi kursor. Pada bagian eksekusi, kursor yang dideklarasikan dibuka, diambil, dan ditutup.
Atribut Kursor
Baik kursor implisit maupun kursor eksplisit memiliki atribut tertentu yang dapat diakses. Atribut-atribut ini memberikan informasi lebih lanjut tentang operasi kursor. Berikut adalah berbagai atribut kursor dan penggunaannya.
| Atribut Kursor | Deskripsi |
|---|---|
| %DITEMUKAN | Mengembalikan nilai Boolean TRUE jika operasi pengambilan data terakhir berhasil mengambil data; jika tidak, mengembalikan FALSE. |
| %TIDAK DITEMUKAN | Berfungsi berlawanan dengan %FOUND. Fungsi ini mengembalikan TRUE jika operasi pengambilan data terakhir tidak dapat mengambil data apa pun. |
| %TERBUKA | Mengembalikan nilai Boolean TRUE jika kursor yang diberikan sudah terbuka; jika tidak, mengembalikan FALSE. |
| % ROWCOUNT | Mengembalikan nilai numerik yang menunjukkan jumlah sebenarnya dari catatan yang terpengaruh atau diambil oleh operasi tersebut. |
Contoh Kursor Eksplisit: Dalam contoh ini, kita akan melihat cara mendeklarasikan, membuka, mengambil, dan menutup kursor eksplisit. Kita akan memproyeksikan semua nama karyawan dari tabel emp menggunakan kursor. Kita juga akan menggunakan atribut kursor untuk mengatur perulangan agar mengambil semua catatan dari kursor.
Tangkapan layar di bawah ini menunjukkan contoh kursor eksplisit ini dan outputnya. Oracle.
DECLARE CURSOR guru99_det IS SELECT emp_name FROM emp; lv_emp_name emp.emp_name%type; BEGIN OPEN guru99_det; LOOP FETCH guru99_det INTO lv_emp_name; IF guru99_det%NOTFOUND THEN EXIT; END IF; Dbms_output.put_line('Employee Fetched:'||lv_emp_name); END LOOP; Dbms_output.put_line('Total rows fetched is'||guru99_det%ROWCOUNT); CLOSE guru99_det; END; /
Keluaran
Employee Fetched:BBB Employee Fetched:XXX Employee Fetched:YYY Total rows fetched is 3
Code Penjelasan
- Code baris 2: Mendeklarasikan kursor guru99_det untuk pernyataan 'SELECT emp_name FROM emp'.
- Code baris 3: Mendeklarasikan variabel lv_emp_name dengan %Tipe terikat pada emp.emp_name.
- Code baris 5: Membuka kursor guru99_det.
- Code baris 6: Mengatur pernyataan perulangan dasar untuk mengambil semua catatan dalam tabel emp.
- Code baris 7: Mengambil data guru99_det dan menetapkan nilainya ke lv_emp_name.
- Code baris 8: Menggunakan atribut kursor %NOTFOUND untuk memeriksa apakah semua data dalam kursor telah diambil. Jika sudah diambil, fungsi akan mengembalikan TRUE dan kontrol keluar dari perulangan; jika belum, kontrol akan terus mengambil data dari kursor dan mencetaknya.
- Code baris 10: Kondisi EXIT untuk pernyataan loop.
- Code baris 12: Cetak nama karyawan yang diambil.
- Code baris 14: Gunakan atribut kursor %ROWCOUNT untuk menemukan jumlah total catatan yang diambil oleh kursor.
- Code baris 15: Setelah keluar dari loop, kursor ditutup dan memori yang dialokasikan dibebaskan.
Pernyataan FOR Loop Cursor
Kursor UNTUK lingkaran Dapat digunakan untuk bekerja dengan kursor. Kita dapat memberikan nama kursor sebagai pengganti batas rentang dalam pernyataan perulangan FOR, sehingga perulangan bekerja dari catatan pertama kursor hingga catatan terakhir kursor. Variabel kursor, pembukaan kursor, pengambilan, dan penutupan kursor semuanya dilakukan secara implisit oleh perulangan FOR.
Sintaksis
DECLARE CURSOR <cursor_name> IS <SELECT statement>; BEGIN FOR I IN <cursor_name> LOOP . . END LOOP; END;
Dalam sintaks di atas, bagian deklarasi berisi deklarasi kursor. Kursor dibuat untuk pernyataan SELECT yang diberikan dalam deklarasi kursor. Pada bagian eksekusi, kursor yang dideklarasikan diatur dalam loop FOR, dan variabel loop 'I' berperilaku sebagai variabel kursor dalam hal ini.
Oracle Contoh Perulangan Kursor: Dalam contoh ini, kita akan memproyeksikan semua nama karyawan dari tabel emp menggunakan perulangan kursor-FOR.
DECLARE CURSOR guru99_det IS SELECT emp_name FROM emp; BEGIN FOR lv_emp_name IN guru99_det LOOP Dbms_output.put_line('Employee Fetched:'||lv_emp_name.emp_name); END LOOP; END; /
Keluaran
Employee Fetched:BBB Employee Fetched:XXX Employee Fetched:YYY
Code Penjelasan
- Code baris 2: Mendeklarasikan kursor guru99_det untuk pernyataan 'SELECT emp_name FROM emp'.
- Code baris 4: Membangun perulangan FOR untuk kursor dengan variabel perulangan lv_emp_name.
- Code baris 6: Mencetak nama karyawan di setiap iterasi loop.
- Code baris 7: Keluar dari perulangan (END LOOP).
Catatan: Dalam perulangan FOR kursor, atribut kursor tidak dapat digunakan, karena pembukaan, pengambilan, dan penutupan kursor dilakukan secara implisit oleh perulangan FOR.

