Cursors Pada PL/SQL

Apa Itu Cursor?

Pada program PL/SQL, kita tidak bisa menyimpan data hasil query yang lebih dari 1 record di variabel. Untuk menyimpan data yang lebih dari 1 record, maka gunakanlah Cursor. Karena cursor berperan sebagai penampung data dari hasil query.

Jenis Cursor

Ada 2 jenis cursor pada oracle PL/SQL, yaitu:

1. Implicit Cursor

Implicit Cursor adalah cursor yang di deklarasikan dan dikelola secara otomatis oleh PL/SQL untuk semua operasi SELECT Statement dan DML (Data Manipulation Language). Implicit cursor akan menghasilkan 1 row/record.

Contoh:

SELECT employe_name INTO vName FROM Employee Where ROWNUM = '1';


2. Explicit Cursor

Explicit Cursor adalah cursor yang didefiniskan pada bagian deklarasi (DECLARE) dan biasanya menggunakan mekanisme open, fetching, dan close cursor.

Tahapan Dalam Cursor

Ada beberapa tahapan atau proses dalam membuat cursor di Oracle PL/SQL, yaitu:

1. Deklarasi (DECLARE)
Tahapan ini digunakan untuk mendeklarasikan sebuah cursor. Sintaknya adalah:

CURSOR cursor_name IS SELECT ...;

2. Open
Tahapan ini digunakan untuk membuka atau mengaktifkan sebuah cursor. Sintaknya adalah:

OPEN cursor_name;

3. Fetching Data (Mengambil data)
Tahapan ini digunakan untuk mengambil data dari sebuah cursor dan ditampung dalam sebuah variabel yang telah ditentukan. Sintaknya adalah :

FETCH cursor_name INTO variable_list;

4. CLOSE (Menutup cursor).
Tahapan ini digunakan untuk menutup atau me-nonaktifkan sebuah cursor. Sintaknya adalah :

CLOSE cursor_name;

Atribut Pada Cursor

Di bawah ini adalah atribut-atribut yang sering digunakan ketika membuat sebuah cursor di PL/SQL. Biasanya digunakan pada implicit cursor.

Atribut Keterangan
SQL%ROWCOUNT Digunakan untuk menampilkan jumlah record yang dihasilkan dari SELECT, UPDATE, dan DELETE statement.
SQL%FOUND Bernilai TRUE jika cursor menghasilkan record/baris atau record berhasil di update atau di delete
SQL%NOTFOUND Kebalikan dari SQL%FOUND, yaitu bernilai TRUE jika cursor tidak menghasilkan record/baris
SQL%ISOPEN Bernilai true jika cursor masih aktif (open)


Contoh Implicit Cursor

Di bawah ini adalah 2 contoh program penggunaan Implicit Cursor pada Oracle PL/SQL:

Contoh Program #1 - Select Statement

DECLARE
    v_emp_name varchar2(100);
BEGIN
    SELECT first_name || ' ' ||  last_name  
	  INTO emp_name 
	  FROM employees 
	 WHERE employee_id=100;
    
	DBMS_OUTPUT.PUT_LINE(v_emp_name);
end;


Contoh Program #2 - Upadate Statement

DECLARE  
  v_number_rows number(5);
BEGIN
  UPDATE employee 
  SET salary = salary + 1000;
  IF SQL%NOTFOUND THEN
    DBMS_OUTPUT.PUT_LINE('Tidak ada record yang berhasil di update');
  ELSIF SQL%FOUND THEN
    v_number_rows := SQL%ROWCOUNT;
    DBMS_OUTPUT.PUT_LINE('Ada ' || v_number_rows || ' record yang telah berhasil di update');
  END IF; 
END;

Contoh Explicit Cursor


Di bawah ini adalah contoh program PL/SQL menggunakan Explicit Cursor:

Contoh #1 - LOOP Cursor

DECLARE
    data_pegawai employees%rowtype;
    CURSOR c_pegawai IS SELECT * FROM employees;
BEGIN
    IF NOT c_pegawai%ISOPEN THEN
    OPEN c_pegawai;
    END IF;
    LOOP 
        EXIT WHEN c_pegawai%NOTFOUND;
        FETCH c_pegawai INTO data_pegawai;
        DBMS_OUTPUT.PUT_LINE(data_pegawai.first_name || ' ' || data_pegawai.last_name);
    END LOOP;
    CLOSE c_pegawai;
END;


Share on Google Plus

About Unknown

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.
    Blogger Comment
    Facebook Comment

4 comments: