Mengunakan Cursor di SP MS-SQL
Ok, sekarang kita akan belajar membuat dan memanfaatkan cursor pada sisi server dan bagaimana mengoptimalkan performance dari cursor ini.
Cursor adalah object dari database yang digunakan oleh aplikasi untuk memanipulasi data dalam bentuk baris per baris ( row-by-row base ), dengan menggunakan perintah SQL kita bisa menggunakan semua baris dari cursor dalam satu waktu. Misalnya, anda bisa menggunakan cursor yang memberikan daftar dari semua user database dan membuat multi operasi pada database dengan mengeset database sebagai sebuah variabel.
Cursor pada sisi server ini pertama kali direlease pada SQL Server 6.0 dan skrg support untuk semua versi SQL Server. Sebelum menggunakan cursor, anda harus mendeklarasikan cursor ini terlebih dahulu, jika cursor telah dideklarasi anda bisa membuka cursor ini dan memfetch rows pada cursor. Anda bisa melakuka fetch baris per baris dan membuat multiple operasi pada baris yang aktif dari sebuah cursor. Jika anda telah selesai menggunakan cursor anda harus menutup ( close ) anda mengalokasi ulang ( deallocate ) untuk mengembalikan resourcer SQL Server yang terpakai.
Untuk lebih jelasnya kita akan melihat contoh stored procedure berikut ini >>
CREATE PROCEDURE AED_USG @mERROR_MESSAGE nchar(50) output, @mPROCESS nchar(6), @Nomor_Urut_Usg nvarchar(25), @Register_Kunjungan nvarchar(25), @Tanggal_Usg datetime, @mDetailItemBarang char(5000), @Kode_Jenis nvarchar(5),@Kode_Perawat nvarchar(15) AS declare @mERROR_NO int declare @mLOOP int, @mTOTAL_LOOP int declare @Kode_Barang nvarchar(9), @Qty int, @cHarga_Jual nchar(10), @Harga_Jual money, @Kode_Dokter nvarchar(15) declare @HPP money -- Mulai proses, cek parameter jika sebagai ADD lakukan -- Query penambahan data if @mPROCESS = 'ADD' Begin -- untuk data pemakaian barang if len(@mDetailItemBarang) > 1 begin -- satu baris mengalokasi 40 karakter (4 * 10) -- data pemakaian barang set @mLOOP = 0 set @mTOTAL_LOOP = ceiling(len(@mDetailItemBarang)/40) while @mLOOP <= @mTOTAL_LOOP begin set @Kode_Barang = substring(@mDetailItemBarang, @mLOOP * 40 + 1, 10) set @Qty = substring(@mDetailItemBarang, @mLOOP * 40 + 11,10) set @cHarga_Jual = substring(@mDetailItemBarang, @mLOOP * 40 + 21,10) set @Harga_Jual = convert(money,@cHarga_Jual) set @Kode_Dokter = substring(@mDetailItemBarang, @mLOOP * 40 + 31,10) set @mLOOP = @mLOOP + 1 --set the cursor untuk harga beli barang DECLARE @Barang_Cursor CURSOR SET @Barang_Cursor = CURSOR LOCAL SCROLL FOR SELECT [HPP] From Barang Where [Kode Barang] = @Kode_Barang OPEN @Barang_Cursor FETCH NEXT FROM @Barang_Cursor INTO @HPP CLOSE @Barang_Cursor DEALLOCATE @Barang_Cursor Insert Into Pemakaian_Barang ([Kode Data],[Register Kunjungan],[Tanggal Pakai], [Kode Barang],[Qty],[Harga Beli],[Harga Jual], [Kode Jenis],[Kode Unit],[Kode Dokter],[Kode Pegawai]) values (@Nomor_Urut_Usg, @Register_Kunjungan, @Tanggal_USG, @Kode_Barang, @Qty, @HPP, @Harga_Jual, @Kode_Jenis, @Kode_Unit, @Kode_Dokter, @Kode_Perawat) set @mERROR_NO = @@ERROR if @mERROR_NO <> 0 begin Rollback transaction set @mERROR_MESSAGE = ' > SP 2 < Error pada pengisian data Pemakaian Barang' return (2) End End End End Commit Transaction Return (0)





stmikbg.com adalah web untuk komunitas bagi anak-anak stmik bumigora khususnya dan anak-anak IT umumnya, baek yang cupu maupun yang expert.
May 6th, 2008 at 9:03 pm
haduh haduh.. pusing pala ku baca itu code code… zzZZzzZz mending tidur dah… emang aku cupu banget klo masalah code code program ginian… hiks hiks..
(