Tuesday, December 5, 2017

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:


PL/SQL Cursor

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

Popular Posts