Kursor dapat menjadi eksplisit atau implisit, dan salah satu tipe dapat digunakan dalam loop FOR. Sebenarnya ada dua aspek dari pertanyaan Anda.
Mengapa menggunakan loop FOR kursor eksplisit di atas kursor implisit FOR loop?
- Gunakan loop FOR kursor eksplisit ketika kueri akan digunakan kembali, jika tidak kursor implisit lebih disukai.
Mengapa menggunakan loop dengan FETCH daripada loop UNTUK yang tidak memiliki FETCH eksplisit?
- Gunakan FETCH di dalam loop ketika Anda perlu mengumpulkan massal atau ketika Anda membutuhkan SQL dinamis.
Berikut ini beberapa informasi berguna dari dokumentasi.
Contoh Kursor Tersirat UNTUK LOOP
BEGIN
FOR vItems IN (
SELECT last_name
FROM employees
WHERE manager_id > 120
ORDER BY last_name
)
LOOP
DBMS_OUTPUT.PUT_LINE ('Name = ' || vItems.last_name);
END LOOP;
END;
/
Contoh Kursor Eksplisit UNTUK LOOP
DECLARE
CURSOR c1 IS
SELECT last_name
FROM employees
WHERE manager_id > 120
ORDER BY last_name;
BEGIN
FOR vItems IN c1 LOOP
DBMS_OUTPUT.PUT_LINE ('Name = ' || vItems.last_name);
END LOOP;
END;
/
Kursor Tersirat
Kursor implisit adalah kursor sesi yang dibangun dan dikelola oleh PL / SQL. PL / SQL membuka kursor implisit setiap kali Anda menjalankan pernyataan SELECT atau DML. Anda tidak dapat mengontrol kursor implisit, tetapi Anda bisa mendapatkan informasi dari atributnya.
Kursor implisit ditutup setelah pernyataan terkait berjalan; namun, nilai atributnya tetap tersedia hingga pernyataan SELECT atau DML lainnya berjalan.
Atribut kursor implisit adalah: SQL% ISOPEN, SQL% FOUND, SQL% NOTFOUND, SQL% ROWCOUNT, SQL% BULK_ROWCOUNT, SQL% BULK_EXCEPTIONS
Kursor Eksplisit
Kursor eksplisit adalah kursor sesi yang Anda buat dan kelola. Anda harus mendeklarasikan dan menetapkan kursor eksplisit, memberinya nama dan mengaitkannya dengan kueri (biasanya, kueri mengembalikan beberapa baris). Kemudian Anda dapat memproses hasil kueri yang diatur dalam salah satu dari cara berikut:
Buka kursor eksplisit (dengan pernyataan OPEN), ambil baris dari set hasil (dengan pernyataan FETCH), dan tutup kursor eksplisit (dengan pernyataan TUTUP).
Gunakan kursor eksplisit dalam pernyataan kursor UNTUK LOOP (lihat "Hasil Kueri Mengatur Pemrosesan Dengan Kursor Untuk Pernyataan LOOP").
Anda tidak dapat menetapkan nilai ke kursor eksplisit, menggunakannya dalam ekspresi, atau menggunakannya sebagai parameter subprogram formal atau variabel host. Anda dapat melakukan hal-hal itu dengan variabel kursor (lihat "Variabel Kursor").
Tidak seperti kursor implisit, Anda dapat mereferensikan kursor eksplisit atau variabel kursor dengan namanya. Oleh karena itu, variabel kursor atau kursor eksplisit disebut kursor bernama.
Kursor UNTUK Pernyataan LOOP
Pernyataan kursor UNTUK LOOP memungkinkan Anda menjalankan pernyataan SELECT dan kemudian segera loop melalui baris set hasil. Pernyataan ini dapat menggunakan kursor implisit atau eksplisit.
FOR
ini hanyalah cara lain untuk menggunakan kursor. Lihat dokumen: docs.oracle.com/cd/E11882_01/appdev.112/e10472/… Pokoknya, apa yang htp.prn () lakukan?