Stored procedure adalah satu atau lebih perintah-perintah SQL yang disimpan dalam sebuah DBMS. Pemrograman SQL ini sering disebut dengan T-SQL (Transact SQL). Stored procedure ini mirip dengan sebuah fungsi yang umum dalam pemrograman. Stored procedure bisa menerima inputan dari parameter dan dapat juga bisa mengembalikan data lewat result sets maupun output parameternya. Adapun keuntungan dari stored procedure ini adalah :
• Mudah untuk dikelola. Contohnya kita bisa mengoptimalkan serta merubah perintah dalam stored procedure tanpa mengkompilasi ulang aplikasi yang menggunakannya.
• Meningkatkan performa DBMS. Karena stored procedure merupakan kumpulan dari banyak perintah, kita dapat menyelesaikan banyak perintah hanya dalam satu koneksi ke DBMS, dan jika DBMS terletak pada komputer yang terpisah stored procedure akan mengurangi total waktu untuk menyelesaikan tugas yang kompleks secara drastis.
• Meningkatkan keamanan DBMS. Contohnya kita bisa mengijinkan Windows account untuk menjalankan perintah-perintah dalam aplikasi yang dibuat untuk menggunakan beberapa stored procedure tapi Windows account tersebut tidak boleh mengakses tabel secara langsung.
Ex:
CREATE PROCEDURE TransferDana
@rekeningAsal char(10),
@rekeningTujuan char(10),
@jumlahDana money
AS
BEGIN TRANSACTION
/* Kurangi Saldo dari rekening asal */
UPDATE DataNasabah
SET Saldo = Saldo - @jumlahDana
WHERE no_rekening = @rekeningAsal
/* Tambah Saldo pada rekening tujuan */
UPDATE DataNasabah
SET Saldo = Saldo + @jumlahDana
WHERE no_rekening = @rekeningTujuan
IF (@@ERROR > 0)
ROLLBACK
ELSE
COMMIT
GO
Menggunakan select case procedure:
CREATE PROCEDURE getNumber
@OrderNo char(6)OUTPUT
as
SELECT @OrderNo=Max(cOrderNo) FROM Orders
SELECT @OrderNo=
CASE
WHEN @OrderNo >=0 and @OrderNo < 9
Then '00000'+Convert(char,@OrderNo+1)
WHEN @OrderNo >=9 and @OrderNo < 99
Then '0000'+Convert(char,@OrderNo+1)
WHEN @OrderNo >=99 and @OrderNo < 999
Then '000'+Convert(char,@OrderNo+1)
WHEN @OrderNo >=999 and @OrderNo < 9999
Then '00'+Convert(char,@OrderNo+1)
WHEN @OrderNo >=9999 and @OrderNo < 99999
Then '0'+Convert(char,@OrderNo+1)
WHEN @OrderNo >=99999
Then Convert(char,@OrderNo+1)
END
RETURN