Apa Itu Cursor?
Pada agenda PL/SQL, kita tidak dapat 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 yaitu 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 yaitu cursor yang didefiniskan pada bab deklarasi (DECLARE) dan biasanya memakai prosedur open, fetching, dan close cursor.
Tahapan Dalam Cursor
Ada beberapa tahapan atau proses dalam menciptakan cursor di Oracle PL/SQL, yaitu:1. Deklarasi (DECLARE)
Tahapan ini dipakai untuk mendeklarasikan sebuah cursor. Sintaknya adalah:
CURSOR cursor_name IS SELECT ...;
2. Open
Tahapan ini dipakai untuk membuka atau mengaktifkan sebuah cursor. Sintaknya adalah:
OPEN cursor_name;
3. Fetching Data (Mengambil data)
Tahapan ini dipakai untuk mengambil data dari sebuah cursor dan ditampung dalam sebuah variabel yang telah ditentukan. Sintaknya yaitu :
FETCH cursor_name INTO variable_list;
4. CLOSE (Menutup cursor).
Tahapan ini dipakai untuk menutup atau me-nonaktifkan sebuah cursor. Sintaknya yaitu :
CLOSE cursor_name;
Atribut Pada Cursor
Di bawah ini yaitu atribut-atribut yang sering dipakai saat menciptakan sebuah cursor di PL/SQL. Biasanya dipakai pada implicit cursor.Atribut | Keterangan |
---|---|
SQL%ROWCOUNT | Digunakan untuk menampilkan jumlah record yang dihasilkan dari SELECT, UPDATE, dan DELETE statement. |
SQL%FOUND | Bernilai TRUE jikalau cursor menghasilkan record/baris atau record berhasil di update atau di delete |
SQL%NOTFOUND | Kebalikan dari SQL%FOUND, yaitu bernilai TRUE jikalau cursor tidak menghasilkan record/baris |
SQL%ISOPEN | Bernilai true jikalau cursor masih aktif (open) |
Contoh Implicit Cursor
Di bawah ini yaitu 2 teladan agenda 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 yaitu teladan agenda PL/SQL memakai 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;