Kamis, 20 Maret 2014

CURSOR


Sebuah query mengembalikan sekumpulan baris yang biasa disebut sebagai resultset. Cursor merupakan sebuah pointer yang dipakai untuk menunjuk posisi tertentu (baris) dalam sebuah resultset. Jadi kita bisa menggunakan Cursor untuk berjalan-jalan dalam resultset, mengambil datanya, dan kemudian memprosesnya

Alur Cursor

1. Declare Cursor
    Deklarasi Cursor (DECLARE) Pendeklarasian CURSOR menspesifikasikan nama CURSOR dan perintah SELECT yang dipakai dalam CURSOR tersebut. Declare <nama cusrsor> cursor for<perintah select>;
     2. Open
Dengan membuka CURSOR, kita menjalankan <perintahSELECT> dalam CURSOR dan menempatkan  CURSOR pada posisi pertama dari hasil Open<nama cursor>;
     3. Fetch
          Mengambil baris dalam Cursor (FETCH) Setiap proses ini, mengambil baris selanjutnya dalam hasil SELECT Fetch next from <nama cursor> into <target list>
     4. While
        <Target list> merupakan variable yang dipakai untuk menyimpan masing-masing kolom dalam SELECT.  Untuk melakukan perjalanan, kita harus menggunakan perulangan. Dalam WHILE inilah dilakukan pengecekan apakah Cursor empty atau tidak.
         While @@fetch_status=0
                                Begin
                                .....
                                END;
     5. Close
              Menutup CURSOR dan menghapus pemakaian sumber daya sistem.
         Close <nama cursor>
         Dellocate <nama cursor>

Contoh Cursor

          DECLARE @kdbrg_masuk char(10)
         DECLARE @qty_masuk char(10)
      
            DECLARE TC CURSOR For
SELECT kd_brg,qty from barang_masuk

               OPEN TC
               FETCH FROM TC INTO @kdbrg_masuk,@qty_masuk
               WHILE @@FETCH_STATUS = 0
                   BEGIN
                        UPDATE STOK_BARANG SET qty_in = @qty_masuk,
                        qty_akhir = qty_akhir + @qty_masuk
                        WHERE kd_brg = @kdbrg_masuk

                        FETCH NEXT FROM TC INTO @kdbrg_masuk,@qty_masuk
                END
             CLOSE TC
             DEALLOCATE TC
.
 

Tidak ada komentar:

Posting Komentar