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
LATIHAN :
1. Buat SP_Cursor2, hasilnya seperti berikut :
DAFTAR HADIR MAHASISWA
Tanggal : 28-04-2008
No | NIK | Nama | TTD |
1 2 3 4 5 | 1 2 3 4 5 | A B C D E | |
DOSEN : | PARAF : |
alter proc SP_cursor2
as
begin
--1 Mendeklarasikan Cursor
DECLARE CsrMsiswa CURSOR
FOR Select NIK, Nama from Msiswa
--2 Membuka Cursor
OPEN CsrMsiswa
--3 Memproses Cursor
declare @No int
DECLARE @NIK int
DECLARE @NAMA char(30)
set @No = 0
print 'Data Hadir Mahasiswa'
print 'Tanggal:' + convert(varchar, getdate())
print '========================================='
print 'No |NIK |Nama |TTD '
print '========================================='
FETCH NEXT FROM CsrMsiswa into @NIK, @NAMA
WHILE @@FETCH_STATUS=0
BEGIN
set @No = @No + 1
PRINT convert(varchar, @No)+ ' |'+CONVERT(CHAR(1),@NIK) +' |'+ convert(varchar(5), @NAMA)+' |'+' |'
FETCH NEXT FROM CsrMsiswa into @NIK, @NAMA
END
print '========================================='
print ' | |Dosen |Paraf'
print '========================================='
--4 Menutup Cursor
CLOSE CsrMsiswa
--5 Mendealokasikan Cursor
DEALLOCATE CsrMsiswa
end
go
2. Buat SP_Cursor3, hasilnya seperti berikut :
DAFTAR NILAI MAHASISWA
MATA KULIAH :
DOSEN :
No | NIK | Nama | 1 | 2 | 3 | 4 | 5 | RATA-2 |
1 2 3 4 5 | 1 2 3 4 5 | A B C D E |
3. Ubah struktur tabelnya, kemudian isikan datanya sbb :
No | NIK | Nama | GAJI | DEPARTEMEN |
1 2 3 4 5 | 1 2 3 4 5 | A B C D E | 1000 1000 2000 2000 3000 | IT IT HRD HRD PPIC |
alter proc SP_cursor4
as
begin
--1 Mendeklarasikan Cursor
DECLARE CsrMsiswa CURSOR
FOR Select NIK, Nama, Gaji, Department from Msiswa
--2 Membuka Cursor
OPEN CsrMsiswa
--3 Memproses Cursor
declare @No int
DECLARE @NIK int
DECLARE @NAMA char(30)
declare @Gaji money
declare @dept nvarchar(15)
set @No = 0
print 'Data Nilai Mahasiswa'
print '=================================================='
print 'No |NIK |Nama |Gaji |Departement|'
print '=================================================='
FETCH NEXT FROM CsrMsiswa into @NIK, @NAMA, @Gaji, @dept
WHILE @@FETCH_STATUS=0
BEGIN
set @No = @No + 1
PRINT convert(varchar, @No)+' |'+CONVERT(CHAR(1),@NIK) + ' |'+convert(varchar(5), @NAMA)+' |'+convert(char(7), @Gaji)+' |'+convert(char(10), @dept)+' |'
FETCH NEXT FROM CsrMsiswa into @NIK, @NAMA, @Gaji, @dept
END
print '=================================================='
--4 Menutup Cursor
CLOSE CsrMsiswa
--5 Mendealokasikan Cursor
DEALLOCATE CsrMsiswa
end
go
exec dbo.SP_cursor4
Buat SP Cursor4, hasilnya seperti berikut :
DEPARTEMEN | JUMLAH |
IT HRD PPIC | 2 ORANG 2 ORANG 1 ORANG |
TOTAL | 5 ORANG |
alter proc SP_cursor5
as
begin
--1 Mendeklarasikan Cursor
DECLARE CsrMsiswa CURSOR
FOR Select Department, count(NIK) from Msiswa group by department
--2 Membuka Cursor
OPEN CsrMsiswa
--3 Memproses Cursor
DECLARE @jml int
DECLARE @count int
declare @dept nvarchar(15)
set @jml = 0
print 'Hasil:'
print '========================'
print 'Dept |Jumlah Orang|'
print '========================'
FETCH NEXT FROM CsrMsiswa into @dept, @Count
WHILE @@FETCH_STATUS=0
BEGIN
PRINT convert(char(8),@Dept)+'|'+convert(varchar(5),@count)+' orang'
set @jml = @jml + @count
FETCH NEXT FROM CsrMsiswa into @dept, @count
END
print'========================='
print 'Jumlah: ' +convert(char(2), @jml) + 'orang'
print'========================='
--4 Menutup Cursor
CLOSE CsrMsiswa
--5 Mendealokasikan Cursor
DEALLOCATE CsrMsiswa
end
go
exec dbo.SP_cursor5
create PROCEDURE SpStatistik
@MK varchar(5)
AS
BEGIN
DECLARE csrNilai CURSOR
FOR SELECT tbNilai.NILAI FROM tbNilai
WHERE MK=@MK
OPEN csrNilai
DECLARE @NRP varchar(7)
DECLARE @NILAI int
DECLARE @MUTU varchar(1)
FETCH NEXT FROM csrNilai INTO @NILAI
DECLARE @1 INT,@2 INT,@3 INT,@4 INT,@5 INT
SET @1=0
SET @2=0
SET @3=0
SET @4=0
SET @5=0
WHILE @@FETCH_STATUS=0
BEGIN
IF(@NILAI>85 AND @NILAI<90)
SET @1 = @1+1
IF (@NILAI>70 AND @NILAI<84)
SET @2 = @2+1
IF (@NILAI>55 AND @NILAI<69)
SET @3 = @3+1
IF (@NILAI>40 AND @NILAI<54)
SET @4 = @4+1
IF (@NILAI>0 AND @NILAI<39)
SET @5 = @5+1
FETCH NEXT FROM csrNilai INTO @NILAI
END
CLOSE csrNilai
DEALLOCATE csrNilai
print 'Jumlah nilai A:'+CONVERT(CHAR(5),@1)+'orang'
print 'Jumlah nilai B:'+CONVERT(CHAR(5),@2)+'orang'
print 'Jumlah nilai C:'+CONVERT(CHAR(5),@3)+'orang'
print 'Jumlah nilai D:'+CONVERT(CHAR(5),@4)+'orang'
print 'Jumlah nilai E:'+CONVERT(CHAR(5),@5)+'orang'
END
GO
EXEC SpStatistik 'MK01'
Tidak ada komentar:
Posting Komentar