Rabu, 19 Januari 2011

Bahan 8 - 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

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