Menulis Kursor Explisit
Tentang Cursors
Setiap pernyataan SQL dieksekusi oleh Server Oracle memiliki kursor individu yang terkait dengan itu:
• Implicit cursors: Dinyatakan untuk semua DML dan PL / SQL SELECT
• Explicit cursors: Dinyatakan dan dinamai oleh programmer
Mengontrol Explicit Cursors
1. Buka Cursor
2. Ambil baris
3. Tutup Cursor
Decklaring the Cursor
Syntax:
CURSOR cursor_name IS
select_statement;
• Jangan menyertakan klausa INTO dalam deklarasi kursor.
• Jika pengolahan baris dalam urutan tertentu diperlukan, gunakan ORDER BY klausa dalam query..
• Jika pengolahan baris dalam urutan tertentu diperlukan, gunakan ORDER BY klausa dalam query..
Example:
DECLARE
CURSOR emp_cursor IS
SELECT employee_id, last_name
FROM employees;
CURSOR dept_cursor IS
SELECT *
FROM departments
WHERE location_id = 170;
BEGIN
...
Membuka Cursor
Syntax:
OPEN cursor_name;
• Buka kursor untuk mengeksekusi query dan mengidentifikasi set aktif.
• Jika query tidak mengembalikan baris, tidak terkecuali dinaikkan.
• Gunakan atribut kursor untuk menguji hasil setelah pengambilan.
• Jika query tidak mengembalikan baris, tidak terkecuali dinaikkan.
• Gunakan atribut kursor untuk menguji hasil setelah pengambilan.
Mengambil Data dari Cursor
Syntax:
FETCH cursor_name INTO [variable1, variable2, ...]
| record_name];
• Ambil nilai-nilai baris saat ini ke dalam variabel.
• Sertakan jumlah yang sama dari variabel.
• Mencocokkan setiap variabel untuk sesuai dengan posisi kolom.
• Test untuk melihat apakah kursor mengandung baris.
• Sertakan jumlah yang sama dari variabel.
• Mencocokkan setiap variabel untuk sesuai dengan posisi kolom.
• Test untuk melihat apakah kursor mengandung baris.
Example:
LOOP
FETCH emp_cursor INTO v_empno,v_ename;
EXIT WHEN ...;
...
-- Process the retrieved data
…
END LOOP;
Penutupan Cursor
Syntax:
CLOSE cursor_name;
• Tutup kursor setelah menyelesaikan processing of the rows.
• Membuka kembali kursor, jika diperlukan.
• Jangan mencoba untuk mengambil data dari kursor setelah itu telah ditutup..
• Membuka kembali kursor, jika diperlukan.
• Jangan mencoba untuk mengambil data dari kursor setelah itu telah ditutup..
Explicit Cursor Attributes
Mendapatkan informasi status tentang cursor
Attribute | Type | Description |
%ISOPEN | Boolean | Mengevaluasi TRUE jika kursor terbuka |
%NOTFOUND | Boolean | Mengevaluasi TRUE jika fetch terbaru tidak mengembalikan baris |
%FOUND | Boolean | Mengevaluasi TRUE jika fetch terbaru mengembalikan baris; pelengkap %NOTFOUND |
%ROWCOUNT | Number | Mengevaluasi untuk jumlah baris yang dikembalikan terakhir kali |
The %ISOPEN Attribute
• Ambil baris hanya ketika kursor terbuka.
• Gunakan atribut % ISOPEN kursor sebelum melakukan fetch untuk menguji apakah kursor terbuka.
• Gunakan atribut % ISOPEN kursor sebelum melakukan fetch untuk menguji apakah kursor terbuka.
Example:
IF NOT emp_cursor%ISOPEN THEN
OPEN emp_cursor;
END IF;
LOOP
FETCH emp_cursor...
Controlling Multiple Fetches
• Proses beberapa baris dari kursor eksplisit menggunakan loop.
• Ambil baris dengan setiap iterasi.
• Gunakan atribut kursor eksplisit untuk menguji keberhasilan setiap fetch.
• Ambil baris dengan setiap iterasi.
• Gunakan atribut kursor eksplisit untuk menguji keberhasilan setiap fetch.
The %NOTFOUND and %ROWCOUNT Attributes
• Use the %ROWCOUNT cursor attribute untuk mengambil jumlah baris yang tepat.
• Use the %NOTFOUND cursor attribute untuk menentukan kapan untuk keluar dari loop.
Example
DECLARE
v_empno employees.employee_id%TYPE;
v_ename employees.last_name%TYPE;
CURSOR emp_cursor IS
SELECT employee_id, last_name
FROM employees;
BEGIN
OPEN emp_cursor;
LOOP
FETCH emp_cursor INTO v_empno, v_ename;
EXIT WHEN emp_cursor%ROWCOUNT > 10 OR
emp_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE (TO_CHAR(v_empno)
||' '|| v_ename);
END LOOP;
CLOSE emp_cursor;
END ;
Cursor anf Records
Proses baris dari set aktif dengan mengambil nilai-nilai ke dalam PL/SQL RECORD.
DECLARE
CURSOR emp_cursor IS
SELECT employee_id, last_name
FROM employees;
emp_record emp_cursor%ROWTYPE;
BEGIN
OPEN emp_cursor;
LOOP
FETCH emp_cursor INTO emp_record;
...
Cursor For Loops
Syntax:
FOR record_name IN cursor_name LOOP
statement1;
statement2;
. . .
END LOOP;
• Kursor FOR loop adalah cara pintas untuk memproses kursor eksplisit.
• Implisit terbuka, mengambil, keluar, dan menutup .
• Record ini secara implisit dideklarasikan..
• Implisit terbuka, mengambil, keluar, dan menutup .
• Record ini secara implisit dideklarasikan..
Mencetak daftar karyawan yang bekerja untuk departemen penjualan.
DECLARE
CURSOR emp_cursor IS
SELECT last_name, department_id
FROM employees;
BEGIN
FOR emp_record IN emp_cursor LOOP
IF emp_record.department_id = 80 THEN
...
END LOOP;
END;
/
Cursor FOR Loops Using Subqueries
Tidak perlu untuk menyatakan kursor.
Example:
BEGIN
FOR emp_record IN (SELECT last_name, department_id
FROM employees) LOOP
-- implicit open and implicit fetch occur
IF emp_record.department_id = 80 THEN
...
END LOOP; -- implicit close occurs
END;
Tidak ada komentar:
Posting Komentar