STORE PROCEDURE
Stored Procedure adalah kumpulan perintah SQL yang diberi nama dan disimpan di server. Stored Procedure biasanya berisi perintah-perintah umum yang berhubungan dengan database pada server, dan menghasilkan sekumpulan record. Stored Procedure ditulis dalam bentuk sebuah script. Dalam SQL Server store procedure memiliki kemampuan antara lain : Menerima parameter input dan mengembalikan beberapa nilai parameter output dari procedure yang dipanggil. Mengandung statement pemrograman yang melakukan operasi terhadap database termasuk memanggil store procedure lain. Memberikan status yang mengindikasikan keberhasilan atau kegagalan eksekusi store procedure Keuntungan pemakaian store procedure adalah : Merupakan pemrograman modular Store procedure dibuat sekali dan dapat dipakai berulang untuk komputasi yang sama Memungkinkan eksekusi lebih cepat Ketika pertama kali dijalankan store procedure akan tersimpan dalam memori. Sehingga memungkinkan eksekusi berikutnya lebih cepat. Mengurangi trafik jaringan Barisan kode transact SQL yang seharusnya dilewatkan jaringan, akan digantikan dengan statement tunggal pemanggilan store procedure Dapat digunakan sebagai mekanisme sekuriti Pengguna dimungkinkan mengeksekusi Store procedure, walau mungkin tidak dapat mengeksekusi procedure didalamnya secara langsung. Sebelum mempelajari cara pembuatan store procedure, perlu juga dipelajari statement Transact SQL untuk pemrograman server. Beberapa statement Transact SQL : TIPE DATA PADA PEMROGRAMAN SERVER Data yang dapat dimasukkan ke dalam database kita tentunya bermacammacam. Secara khusus MSSQL Server 2000 mendukung berbagai macam tipe data. Numeric 1. bigint Nilai integer dengan nilai dari -2^63 (-9223372036854775808) sampai 2^631 (9223372036854775807).
Pemrograman Client Server – Sarji, S.Kom Studi kasus pada http://otsypulsa.com
2. int Nilai integer dengan nilai dari -2^31 (-2,147,483,648) sampai 2^31 - 1 (2,147,483,647). 3. smallint Nilai integer dengan nilai dari 2^15 (-32,768) sampai 2^15 - 1 (32,767). 4. tinyint Nilai integer dengan nilai dari 0 sampai 255. 5. bit Nilai integer dengan nilai 1 atau 0. 6. Decimal dan Numeric Angka dengan akurasi tetap dari -10^38 +1 sampai 10^38 –1. Money 1. money Data dengan nilai mata uang -2^63 (-922,337,203,685,477.5808) hingga 2^63 - 1(+922,337,203,685,477.5807) 2. SmallMoney Data dengan nilai mata uang -214,748.3648 through +214,748.3647 Numeric Precession 1. float Bilangan presesi dari -1.79E + 308 sampai 1.79E + 308. 2. real Bilangan presesi dari -3.40E + 38 sampai 3.40E + 38. Date Time 1. datetime Tanggal dan waktu dari January 1, 1753, samapi December 31, 9999, dengan akurasi sampai 3.33 millidetik. 2. smalldatetime Tanggal dan waktu dari January 1, 1900, samapi June 6, 2079, denagn akurasi satu menit. Strings 1. char Field berisi karakter dengan ukuran panjang tetap dengan panjang maksimum 8,000 karakter. 2. varchar Field berisi karakter dengan panjang ukuran tidak tetap dengan panjang maksimum 8,000 characters. 3. text variabel berisi karakter denagn ukuran panjang sampai 2^31 - 1 (2,147,483,647) karakter. Unicode Character Strings
Pemrograman Client Server – Sarji, S.Kom Studi kasus pada http://otsypulsa.com
1. nchar Karakter unicode dengan ukuran panjang tetap 4,000 karakter. 2. nvarchar Karakter dengan panjang tidak tetap hingga 4,000 karakter.. 3. ntext Karakter dengan panjang tidak tetap hingga of 2^30 - 1 (1,073,741,823) Karakter. Binary Strings 1. binary Ukuran tetap data binary hingga 8,000 bytes. 2. varbinary Ukuran panjang tidak tetap data binary hingga 8,000 bytes. 3. image Ukuran tidak tetap data binary hingga 2^31 - 1 (2,147,483,647) bytes. Tipe Data Lain 1. cursor Referensi ke cursor. 2. timestamp Angka ekslusif yang dikenali oleh database 3. uniqueidentifier Pengenal global yang eksklusif. OPERATOR Urutan operator yang didukung secara khusus oleh SQL Server berdasar urutan evaluasi: + (positif), - (negatif), ~ (birwise NOT) * (perkalian), / (pembagian), % (modulus) + (penjumlahan), + (pengabungan), - (pengurangan) =, >, <, >=, <=, <>, !=, !>, !< (perbandingan) ^ (bitwise exclusive OR), & (bitwise AND), | (bitwise OR) NOT AND ALL, ANY, BETWEEN, IN, LIKE, OR, SOME = (penugasan) VARIABEL Semua bahasa pemrograman mengenal bahasa pemroraman, termasuk pemrograman database di server. Variabel di deklarasikan pada badan Bacth atau Procedure dengan pernyataan DECLARE dan diberi nilai dengan pernyataan SET atau SELECT. Variabel cursor bisa dideklarasikan dengan pernyataan ini. Setelah deklarasi semua variabel diinisialisasi dengan nilai NULL.
Pemrograman Client Server – Sarji, S.Kom Studi kasus pada http://otsypulsa.com
Variabel Biasa Sintaks : DECLARE @variabel_lokal tipe_data Description @variabel lokal Nama variabel. Setiap nama variabel lokal selalu diawali dengan tanda @, dan harus unik pada suatu blok. Tipe data Semua tipe data yang disediakan oleh sistem. Contoh: DECLARE @kdProduk VARCHAR(8) Mendefinisikan sebuah variabel bernama kdProduk dengan tipe VARCHAR panjang 8. Variabel Cursor Untuk medefinisikan atribut dari CURSOR server di Transact-SQL. Misalnya perilaku scrolling dan query yang digunakan utnuk membuat hasil dimana cursor beroperasi Sintaks : DECLARE nama_cursor CURSOR FOR statement_select Description Nama_Cursor Nama variabel yang bertipe cursor Statement_Select Pernyataan SELECT standar yang mendefinisikan hasil dari cursor. Kata kunci COMPUTE, COMPUTE BY, FOR BROWSE dan INTO tidak boleh dalam select_statement dari deklarasi cursor. Contoh: DECLARE Cur_Produk CURSOR Memesan variabel bertipe Cursor bernama Cur_Produk BLOK STATEMENT (BEGIN ... END) Berfungsi untuk mendefinisikan blok statement Sintaks : BEGIN { Statement SQL } END Pemrograman Client Server – Sarji, S.Kom Studi kasus pada http://otsypulsa.com
PERULANGAN (WHILE) Perulangan digunakan untuk mengeksekusi suatu perintah Transact-SQL atau blok perintah Transact- SQL secara berulang-ulang selama kondisinya adalah terpenuhi. Eksekusi dari perintah WHILE dapat di kendalikan dengan BREAK dan CONTINUE. Sintaks : WHILE ekspresi_boolean { Statement_SQL | Blok_Statement } [ BREAK ] { Statement_SQL | Blok_Statement } [ CONTINUE ]
Deskripsi Ekspresi_Boolean Kondisi yang mengembalikan nilai TRUE atau FALSE. { Statement_SQL | Blok_Statement } Adalah perintah Transact-SQL atau grup statement dalam satu blok. BREAK Perintah untuk mengakhiri perintah perulangan. CONTINUE Untuk mengulang perulangan. Contoh: while (select avg(gaji) from pilot) < 15000000 begin update pilot set gaji = gaji * 2 select max(gaji) from pilot if (select max(gaji) from gaji) > 20000000 break else continue end print ‘Gaji sudah tinggi’ @parameter Adalah parameter procedure. Kita bisa mendefinisikan lebih dari satu parameter dalam satu parameter pada waktu membuat Store Procedure. Satu Store Procedure maksimum memiliki 2,100 parameters. Tipe_data
Pemrograman Client Server – Sarji, S.Kom Studi kasus pada http://otsypulsa.com
Adalah tipe data dari parameter yang bersangkutan. Semua tipe data dapat masuk seperti Text, Numeric, Int, Smallint dan lainnya. Tipe data Cursor hanya dapat digunakan sebagai Output. AS Tempat meletakkan aksi-aksi procedure. sql_statement Kumpulan perintah SQL yang akan dimasukkan dalam procedure tersebut n Adalah indikasi berapa banyak Statement SQL yang dimasukkan Catatan: Ukuran satu store procedure maksimal 128 MB.
Latihan 1. Buka kembali database Penjualan_xxxx yang telah dibuat pada pertemuan 2 2. Aktifkan database Penjualan_xxxx USE Penjualan_xxxx
3. Membuat Store Procedure untuk menampilkan semua data produk CREATE PROC SP_TampilProduk AS SELECT * FROM produk
4. Jalankan Store Procedure SP_TampilProduk Exec SP_TampilProduk
5. Membuat Store Procedure untuk menampilkan data berdasarkan sayarat tertentu CREATE PROC SP_TampilProdukId (@KdProduk varchar(8)) AS SELECT * FROM produk WHERE KdProduk=@KdProduk
6. Jalankan Store Procedure SP_TampilProdukId Exec SP_TampilProdukId 'A10'
Pemrograman Client Server – Sarji, S.Kom Studi kasus pada http://otsypulsa.com
7. Membuat Store Procedure untuk menambah data Produk CREATE PROCEDURE SP_InsertProduk( @kdProduk varchar(8), @nmProduk varchar(40), @hrgBeli money, @hrgJual money, @stok int, @gangguan char(1) ) AS BEGIN TRANSACTION INSERT INTO produk VALUES(@kdProduk,@nmProduk,@hrgBeli,@hrgJual,@stok,@gangguan ) IF @@error = 0 BEGIN COMMIT TRANSACTION END ELSE BEGIN ROLLBACK TRANSACTION END
8. Jalankan Procedure SP_InsertProduk SP_InsertProduk 'I5','IM3 5000',5000,5200,200,'0' Exec SP_InsertProduk 'I10','IM3 10000',9950,10150,230,'0'
9. Membuat Store Procedure untuk mengubah data produk CREATE PROCEDURE SP_UpdateProduk( @kdProduk varchar(8), @hrgBeli money, @hrgJual money, @gangguan char(1) ) AS BEGIN TRANSACTION UPDATE produk SET HrgBeli=@hrgBeli,HrgJual=@hrgJual,gangguan=@gangguan WHERE KdProduk=@kdProduk IF @@error <> 0 BEGIN ROLLBACK TRANSACTION END ELSE BEGIN COMMIT TRANSACTION END
10. Jalankan Store Procedure SP_UpdateProduk SP_UpdateProduk 'A10',9950,10150,'0'
Pemrograman Client Server – Sarji, S.Kom Studi kasus pada http://otsypulsa.com
11. Membuat Store Procedure untuk menghapus data produk CREATE PROCEDURE SP_DelProduk( @kdProduk varchar(8) ) AS BEGIN TRANSACTION DELETE FROM produk WHERE KdProduk=@kdProduk IF @@error <> 0 BEGIN ROLLBACK TRANSACTION END ELSE BEGIN COMMIT TRANSACTION END
12. Jalankan Store Procedure SP_DelProduk Exec SP_DelProduk 'I10'
Tugas 1. Buat Store Procedure untuk menampilkan semua data reseller 2. Buat Store Procedure untuk menampilkan data reseller berdasarkan kode reseller 3. Buat Store Procedure untuk menampilkan reseller yang namanya berawalan huruf F 4. Buat Store Procedure untuk menambah data reseller 5. Buat Store Procedure untuk mengubah data reseller 6. Buat Store Procedure untuk menghapus data reseller yang saldonya 0 (nol) 7. Buat Store Procedure untuk menampilkan semua data transaksi yang statusnya pending 8. Buat Store Procedure untuk menambahkan data transaksi 9. Buat Store Procedure untuk mengubah status transaksi dari pending menjadi sukses 10. Buat Store Procedure untuk menghapus transaksi dengan status gagal
Pemrograman Client Server – Sarji, S.Kom Studi kasus pada http://otsypulsa.com