Kursor Oracle PL / SQL: Implisit, Eksplisit, Kursor UNTUK Gelung (Contoh)

Isi kandungan:

Anonim

Apa itu CURSOR dalam PL / SQL?

Kursor adalah penunjuk ke kawasan konteks ini. Oracle membuat kawasan konteks untuk memproses pernyataan SQL yang mengandungi semua maklumat mengenai pernyataan tersebut.

PL / SQL membolehkan pengaturcara mengawal kawasan konteks melalui kursor. Kursor menahan baris yang dikembalikan oleh pernyataan SQL. Kumpulan baris yang dipegang kursor disebut sebagai set aktif. Kursor ini juga boleh dinamakan sehingga dapat dirujuk dari tempat lain kod.

Dalam tutorial ini anda akan belajar-

  • Kursor Tersirat
  • Kursor Eksplisit
  • Atribut Kursor
  • UNTUK penyataan Loop Cursor

Kursor terdiri daripada dua jenis.

  • Kursor Tersirat
  • Kursor Eksplisit

Kursor Tersirat

Setiap kali operasi DML berlaku dalam pangkalan data, kursor tersirat dibuat yang menahan baris yang terjejas, dalam operasi tersebut. Kursor ini tidak dapat dinamakan dan, oleh itu ia tidak dapat dikendalikan atau dirujuk dari tempat lain kod. Kita hanya boleh merujuk kursor terbaru melalui atribut kursor.

Kursor Eksplisit

Pengaturcara dibenarkan untuk membuat kawasan konteks bernama untuk menjalankan operasi DML mereka untuk mendapatkan lebih banyak kawalan ke atasnya. Kursor eksplisit harus didefinisikan di bahagian deklarasi blok PL / SQL, dan dibuat untuk pernyataan 'SELECT' yang perlu digunakan dalam kod.

Berikut adalah langkah-langkah yang terlibat dalam bekerja dengan kursor eksplisit.

  • Menyatakan kursor

    Menyatakan kursor bermaksud membuat satu kawasan konteks yang dinamakan untuk pernyataan 'SELECT' yang ditentukan dalam bahagian deklarasi. Nama kawasan konteks ini sama dengan nama kursor.

  • Kursor Pembukaan

    Membuka kursor akan mengarahkan PL / SQL untuk memperuntukkan memori untuk kursor ini. Ini akan menjadikan kursor bersedia untuk mengambil rekod.

  • Mengambil Data dari Kursor

    Dalam proses ini, pernyataan 'SELECT' dijalankan dan baris yang diambil disimpan dalam memori yang diperuntukkan. Ini kini dipanggil sebagai set aktif. Mengambil data dari kursor adalah aktiviti peringkat rekod yang bermaksud kita dapat mengakses data dengan cara rakaman demi rekod.

    Setiap penyataan pengambilan akan mengambil satu set aktif dan menyimpan maklumat rekod tersebut. Pernyataan ini sama dengan pernyataan 'SELECT' yang mengambil rekod dan memberikan kepada pemboleh ubah dalam klausa 'INTO', tetapi tidak akan memberikan pengecualian.

  • Menutup Kursor

    Setelah semua rekod diambil sekarang, kita perlu menutup kursor supaya memori yang diperuntukkan ke kawasan konteks ini akan dilepaskan.

Sintaks:

DECLARECURSOR  IS ;BEGINFOR I IN LOOP… END LOOP;END;
  • Dalam sintaks di atas, bahagian deklarasi mengandungi deklarasi kursor.
  • Kursor dibuat untuk pernyataan 'SELECT' yang diberikan dalam deklarasi kursor.
  • Pada bahagian pelaksanaan, kursor yang dinyatakan diatur dalam gelung FOR dan pemboleh ubah gelung 'I' akan berperilaku sebagai pemboleh ubah kursor dalam hal ini.

Contoh 1 : Dalam contoh ini, kami akan memproyeksikan semua nama pekerja dari jadual emp menggunakan gelung kursor-UNTUK.

DECLARECURSOR guru99_det IS SELECT emp_name FROM emp;BEGINFOR lv_emp_name IN guru99_detLOOPDbms_output.put_line(‘Employee Fetched:‘||lv_emp_name.emp_name);END LOOP;END;/

Pengeluaran

Employee Fetched:BBBEmployee Fetched:XXXEmployee Fetched:YYY

Penjelasan Kod:

  • Baris kod 2 : Menyatakan kursor guru99_det untuk pernyataan 'SELECT emp_name FROM emp'.
  • Baris kod 4 : Membina gelung 'FOR' untuk kursor dengan gelung pemboleh ubah lv_emp_name.
  • Baris kod 5: Mencetak nama pekerja dalam setiap lelaran gelung.
  • Baris kod 8: Keluar dari gelung

Catatan: Dalam gelung Kursor-FOR, atribut kursor tidak dapat digunakan sejak pembukaan, pengambilan dan penutupan kursor dilakukan secara tidak langsung oleh gelung FOR.