DB2 memiliki mekanisme yang disebut cursor, yang memungkinkan sebuah aplikasi me-retrieve beberapa baris dan kemudian memprosesnya menjadi sebuah baris dalam 1 waktu.
Fungsi Cursor
DB2 menggunakan sebuah cursor untuk membuat beberapa baris, dari result table, yang disediakan untuk program aplikasi. Cursor mengidentifikasi baris terakhir dari resukt table. Ketika menggunakan sebuah cursor, program dapat mengambil setiap baris secara sequential dari result table sampai data terakhir. Statement SELECT digunakan harus dalam statement DECLARE CURSOR. Statement DECLARE CURSOR menentukan dan menamai cursor, mengidentifikasi sekumpulan baris yang diambil(retrieved) dengan statement SELECT dari cursor.
Result table diproses seperti sebuah data set yang berurutan. Cursor harus dibuka(dengan statement OPEN) sebelum baris lainnya di-retrieved. Statement FETCH digunakan untuk me-retrieve baris terakhir cursor. FETCH dapat dijalankan berkali-kali sampai semua baris di-retrieved. Ketika sudah sampai pada data terakhir, cursor harus ditutup dengan statement CLOSE.
Sebuah program dapat memiliki beberapa cursor, dan tiap cursor memiliki :
- Statement DECLARE CURSOR untuk menentukan cursor
- Statement OPEN dan CLOSE untuk membuka dan menutup cursor
- Statement FETCH untuk mengambil baris dari result table cursor
Berikut ini syntax untuk menggunakan fungsi cursor
Untuk statement DECLARE CURSOR
DECLARE cursor-name CURSOR FOR
SELECT column1, column2, ..
FROM table-name
WHERE condition
FOR UPDATE OF column, …
FOR FETCH ONLY
Untuk statement OPEN
OPEN cursor-name
Untuk statement FETCH
FETCH cursor-name
INTO :host-variable1, :host-variable2
Untuk statement CLOSE
CLOSE cursor-name
Untuk statement UPDATE
UPDATE table-name
SET column-A = value, column-B = value, …
WHERE CURRENT OF cursor-nam
Untuk statement DELETE
DELETE FROM table-name
WHERE CURRENT OF cursor-nam
CONTOH PENGGUNAAN CURSOR
DECLARE CURS-A CURSOR FOR
SELECT EMPNO, LASTNAME, WORKDEPT
FROM EMPLTABLE
WHERE WORKDEPT = ‘D11’
OPEN CURS-A
FETCH CURS-A
INTO :EMP-NUM, :NAME2, : DEPT
perform the following until end-of data(menampilkan data sampat akhir)
print a report line(mecetaknya)
FETCH CURS-A
INTO :EMP-NUM, :NAME2, : DEPT
CLOSE CURS-A