CURSOR
CURSOR CURSOR merupakan sebuah tipe data yang berisikan kelompok data dari suatu tabel atau lebih. Fungsi cursor: Menghasilkan recor-record tertentu secara sfesifik Membantu akses store procedure yang berhubungan dengan manipulasi data serta dalam penggunaan trigger.
Macam CURSOR pada SQL SERVER STATIC KEYSET DYNAMIC FAST FORWARD-ONLY. (bagian ini tidak di jelaskan secara detail. Digunakan untuk pengembangan BELAJAR)
Langkah-langkah Penggunaan CURSOR Di deklarasikan sebagai variabel lokal dengan mengambil nilai atau data dari suatu tabel. DECLARE [NAMA CURSOR] Penggunaan nama variabel cursor tidak diawali dengan @ (at) seperti variabel biasa.
cont 2. Membuka CURSOR dengan sintak: OPEN [nama cursor] 3. Mengambil nilai dari CURSOR dengan perintah fetch. Macam-macam perintah fetch: Fetch Next Fetch Prior Fetch First Fetch Last
cont Fetch next mengambil nilai cursor dari posisi record cursor yang ada sekarang dan menaikan pointer record ke record berikutnya. fetch next merupakan option default dari perintah fetch.
cont Fetch prior mengambil nilai cursor dari posisi sebelumnya. Dan mengarahkan pointer record keposisi seblumnya. jika posisi record sudah mencapai posisi top (record pertama). Maka tidak ada nilai cursor yang dikembalikan.
cont Fetch First mengambil nilai cursor dari posisi pertama dan mengarahkan pointer ke posisi record pertama. Fetch last mengambil nilai cursor dari posisi record terakhir. Dan mengarahkan pointer ke posisi record terakhir.
Cont. Dalam penggunaan cursor , untuk mengetaui apakah cursor telah mencapai last position (record terakhir) maka dapat diketahui dengan menggunakan variabel @@fetch_status yang akan menunjukan nilai kurang dari 0 jika cursor telah sampai di last position.
Cont (langkah penggunaan cursor) 4. Membebaskan memori. sintax : CLOSE [nama cursor] Membebaskan memori yang di gunakan oleh cursor setelah selesai di jalankan. 5. Menutup cursor yang sudah selesai di gunakan. sintax: DEALLOCATE [nama cursor]
Resume cursor Declare cur_Pegawai cursor for select nim,nama from tb_pegawai Open cur_Pegawai Fetch next from cur_pegawai into @nim,@nama While @@fetch_status = 0 Begin -- statement program fecth next from cur_Pegawai into @nim,@nama End Close cur_pegawai Deallocate cur_pegawai
Contoh soal
TRIGGER PERTEMUAN TERAKHIR
TRIGGER Trigger atau Pemicu. Merupakan jenis Store Procedure Khusus yang menempel pada suatu tabel tertentu dan di eksekusi secara otomatis saat terjadi manipulasi datauntuk tabel tersebut. Sebuah trigger pada SQL server di tempelkan pada operasi manipulasi insert, update dan delete.
cont Sebuah trigger akan dibutuhkan dalam suatu database yang tabel-tabel didalamnya membutuhkan berbagai macam aturan bisnis yang lebih restricted dan dinamis. Sehingga tidak semua orang bisa merubah data yang ada dalam tabel tersebut secara sembarangan.
Beberapa hal yang perlu diperhatikan dalam membuat TRIGGER Pembuatan TRIGGER tidak boleh bertentangan dengan constyraiont, primary key dan foreign key yang ada dalam sebuah tabel. Pembuatan trigger tidak boleh bertentangan dengan referential integrity dan relasi antar tabel. Pembuatan triger juga diperhitungkan dari sisi kompelksitas agar tidak memperlambat proses manipulasi data. Khususnya jika tabel di akses oleh banayk user dalam satu waktu. Jika dalam suatu trigger terdapat kesalahan yang menyebabkan eksekusi suatu manipulasi data terhenti atau di batalkan. Buatlah pesan kesalahan pada user, agar mengetahui proses si batalkan.
Waktu eksekusi trigger Waktu eksekusi trigger dapat di tentukan waktunya pada saat: After : setelah sebuah tabel selesai di manipulasi Instead of : saat proses terjadi.
Blok perintah pembuatan trigger Create trigger [nama trigger] On [nama tabel] [for / after/instead of/insert/update] As sql statement.
Modifikasi trigger Jika terjadi kesalahan pada trigger dan akan di perbaiki, maka trigger tersebut di hapus terlebih dahulu, kemudian di perbaiki statement dari trigger tersebut. Untuk menghapus trigger menggunakan sintax: drop trigger [nama trigger]
Contoh soal Membuat trigger pada tabel pegawai untuk proses insert dan update dengan kondisi: Jika status menikah belum menikah, maka jumlah anak=0 Jika status aktif dari pegawai tidak aktif, maka gaji pokoknya =0.
CREATE TRIGGER TR_PEGAWAI ON TB_PEGAWAI FOR INSERT,UPDATE DECLARE @NIP AS CHAR(10) DECLARE @ST_MENIKAH AS CHAR(1) DECLARE @ST_AKTIF AS CHAR(1) SELECT @NIP=NIP, @ST_MENIKAH=STATUSMENIKAH, @ST_AKTIF=STATUSAKTIF FROM INSERTED IF @ST_MENIKAH=‘S’ UPDATE TB_PEGAWAI SET JUM_ANAK=0 WHERE NIP=@NIP IF @ST_AKTIF = FALSE UPDATE TB_PEGAWAI SET GAJIPOKOK=0 WHERE NIP=@NIP.