Selasa, 10 Juli 2012

Jenis Cursor Pada Oracle

…Cursor…
Blok PL/SQL tidak mengizinkan kita untuk menampilkan beberapa baris dengan menggunakan perintah SELECT secara langsung. Untuk mengatasi kendala ini, maka digunakanlah Cursor. Cursor merupakan sejenis variabel yang dapat digunakan untuk menampung banyak nilai berupa baris atau record. Nilai-nilai yang disimpan di dalam sebuah Cursor selanjutnya dapat dimanipulasi sehingga dapat digunakan sesuai kebutuhan. Atau dapat dikatakan bahwa Cursor merupakan pointer yang menunjuk ke suatu bagian memori untuk menyimpan hasil instruksi SQL. Hasil instruksi SQL tersebut biasanya merupakan multiple row, dan Cursor digunakan untuk menunjuk (pointer) ke salah satu baris data.
Dalam pemakaiannya, sebuah Cursor akan melalui beberapa tahap yakni :
1. Deklarasi (Declare)
2. Buka (Open)
3. Ambil Data (Fetch)
4. Tutup (Close).
Ada pula yang menyebutkan lima tahap, yakni :
1. Deklarasi (Declare)
2. Buka (Open)
3. Baca Berulang (Loop / Fetch)
4. Tutup (Close)
5. Dealokasi Memori (Deallocate)
Cusrsor sendiri dibedakan menjadi :
1. Cursor Eksplisit, merupakan Cursor yang harus dibuka dan ditutup secara manual.
2. Cursor Implisit, merupakan Cursor yang tidak perlu untuk dideklarasikan sebelumnya.

Contoh Sederhana Cursor Pada Oracle :

01DECLARE
02CURSOR CUR_BARANG IS
03SELECT KODE_BARANG, NAMA_BARANG, STOK_BARANG
04FROM BARANG;
05VREC CUR_BARANG%ROWTYPE;
06BEGIN
07OPEN CUR_BARANG;
08LOOP
09FETCH CUR_BARANG INTO VREC;
10EXIT WHEN CUR_BARANG%NOTFOUND;
11Dbms_Output.PUT_LINE(VREC.KODE_BARANG || ' ' || VREC.NAMA_BARANG || ' ' || VREC.STOK_BARANG);
12END LOOP;
13CLOSE CUR_BARANG;
14END;    

Contoh Sederhana Cursor Pada SQL Server :

01CREATE PROCEDURE DAFTAR_PELANGGAN
02AS
03DECLARE @CUSTID INT
04DECLARE @CUSTNAME VARCHAR(30)
05DECLARE @DISCOUNT DECIMAL(4,2)
06DECLARE CUSTCURSOR CURSOR
07FOR
08SELECT CUSTID,CUSTNAME,DISCOUNT
09FROM CUSTOMER
10ORDER BY CUSTID
11FOR READ ONLY
12OPEN CUSTCURSOR
13WHILE (0=0) BEGIN
14FETCH NEXT
15FROM CUSTCURSOR INTO @CUSTID,@CUSTNAME,@DISCOUNT
16
17IF (@@FETCH_STATUS <> 0) BREAK
18PRINT CAST(@CUSTID AS VARCHAR(5)) + " " + @CUSTNAME + CAST(@DISCOUNT ASVARCHAR(5))
19END
20CLOSE CUSTCURSOR
21DEALLOCATE CUSTCURSOR

Cursor mendukung loop diantara result set, membaca setiap baris satu-persatu. Didalam Stored Procedure, Cursor merupakan teknik yang bermanfaat dalam implementasi perhitungan yang kompleks. Disamping itu, Cursor dapat digunakan untuk membantu membuat laporan / ringkasan.

0 komentar:

Posting Komentar