Thursday, January 20, 2011

Cursor

CURSOR
Apa itu CURSOR?
Cursor adalah suatu perintah pemrograman yang mengijinkan setiap baris (record) diproses secara terpisah terhadap record lainnya. Cursor sangat bermanfaat jika ada suatu proses yang rumit yang ingin dilakukan terhadap suatu record. Proses tersebut bisa dilakukan secara satu per satu, yatiu lewat cursor
Algoritma CURSOR ?
1. Mendeklarasikan Cursor
2. Membuka Cursor
3. Memproses Cursor
4. Menutup Cursor
5. Mendealokasikan Cursor
Penggunaan CURSOR yang sederhana
--1 Mendeklarasikan Cursor
DECLARE CsrMsiswa CURSOR
FOR Select * from Msiswa Where NIK>=2 and NIK <=4

--2 Membuka Cursor
OPEN CsrMsiswa


--3 Memproses Cursor
DECLARE @NIK int
DECLARE @NAMA char(30)

FETCH NEXT FROM CsrMsiswa into @NIK, @NAMA
WHILE @@FETCH_STATUS=0
BEGIN
PRINT 'NIK :'+CONVERT(CHAR,@NIK)
PRINT 'NAMA :'+@NAMA

FETCH NEXT FROM CsrMsiswa into @NIK, @NAMA
END

--4 Menutup Cursor
CLOSE CsrMsiswa

--5 Mendealokasikan Cursor
DEALLOCATE CsrMsiswa
Menggunakan Cursor pada Store Procedure
Untuk membuat SP gunakan perintah Create Procedure as. Kemudian salin 5 langkah penggunaan cursor tadi.


Menjalankan SP yang didalamnya ada Cursor


Latihan Cursor : Penggunaan Cursor untuk Pencetakan Struk Gaji
Database : PTABC
Tabel : Karyawan , dengan struktur dan datanya sbb (LIHAT GAMBAR DIBAWAH INI)

PENGGUNAAN SCROLLABLE CURSOR
Ada lima tipe scrollable cursor yang data digunakan saat memproses cursor yaitu :
- Prior
- Next
- First
- Last
- Relative (+/- n)
Untuk mengaktifkan scrollable cursor tambahkan sintak SCROLL saat mendeklarasikan CURSOR, sbb :
--1.Deklarasi cursor
DECLARE CsrKaryawan SCROLL CURSOR
FOR select NIK, NAMA from Karyawan

--2.Buka cursor
Open CsrKaryawan

--3.Proses cursor
DECLARE @nik CHAR(10), @nama VARCHAR(30)

FETCH NEXT FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

FETCH NEXT FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

FETCH NEXT FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

--4.Tutup Cursor
Close CsrKaryawan

--5.Dealokasi Cursor
Deallocate CsrKaryawan
Contoh penggunaan scrollable cursor


Latihan :
1. Coba gunakan scrollable cursor (isikan pada bagian –3. Proses Cursor), dan perhatikan hasilnya :
FETCH NEXT FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

FETCH NEXT FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

FETCH NEXT FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA
2. Coba gunakan scrollable cursor (isikan pada bagian –3. Proses Cursor), dan perhatikan hasilnya :
FETCH FIRST FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

FETCH NEXT FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

FETCH NEXT FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA
3. Coba gunakan scrollable cursor (isikan pada bagian –3. Proses Cursor), dan perhatikan hasilnya :
FETCH LAST FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

FETCH RELATIVE -2 FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

FETCH FIRST FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA
FETCH NEXT FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

4. Coba gunakan scrollable cursor (isikan pada bagian –3. Proses Cursor), dan perhatikan hasilnya :
FETCH LAST FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

FETCH FIRST FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

FETCH PRIOR FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

5. Coba gunakan scrollable cursor (isikan pada bagian –3. Proses Cursor), dan perhatikan hasilnya :
FETCH PRIOR FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

FETCH NEXT FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

FETCH LAST FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

6. Coba gunakan scrollable cursor (isikan pada bagian –3. Proses Cursor), dan perhatikan hasilnya :
FETCH RELATIVE 2 FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

FETCH NEXT FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

FETCH NEXT FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

7. Coba gunakan scrollable cursor (isikan pada bagian –3. Proses Cursor), dan perhatikan hasilnya :
FETCH LAST FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

FETCH PRIOR FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

FETCH PRIOR FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

8. Coba gunakan TANPA scrollable cursor (isikan pada bagian –3. Proses Cursor), dan perhatikan hasilnya :
FETCH LAST FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

FETCH FIRST FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

FETCH PRIOR FROM csrKaryawan into @nik, @nama
PRINT @NIK + @NAMA

CATATAN :
Untuk sintaks PRIOR, LAST, FIRST, RELATIVE hanya bisa digunakan pada SCROLLABLE CURSOR

LATIHAN :
1. BUAT SP_SCR_CURSOR1, HASIL SBB :
NIK NAMA
1001
1002
1003
1004
1003
1002
1001 A
B
C
D
C
B
A




2. BUAT SP_SCR_CURSOR2, HASIL SBB :
NO DEP NIK NAMA GAJI TRANSPORT TOTAL
1 HRD 1001 A 1000 500 1500
2 1002 B 1000 500 1500
-----------------SUBTOTAL 2000 1000 3000

3 IT 1003 C 2000 750 2750
4 1004 D 2000 750 2750
-----------------SUBTOTAL 4000 1500 5500

-----------------GRANDTOTAL 6000 2500 8500




3. BUAT SP_SCR_CURSOR3 untuk mengisi tabel RekapGaji, sbb
Tabel RekapGaji
DEPARTEMEN JLHKARYAWAN GAJI TRANSPORT
HRD 2 2000 1000
IT 2 4000 1500

4. Buat SP_RekapIPK
Tabel Mahasiswa
NIK NAMA IPK
01
01
03
04
05
06 A
B
C
D
E
F 3,50
2,80
2,50
2,00
1,90
3,10

RekapIPK : ini dihasilkan setelah sp dijalankan
RENTANGA RENTANGB JUMLAHMHS
0,00 2,00
2,01 3,00
3,01 4,00

No comments:

Post a Comment