Jawaban:
Prosedur tersimpan adalah kumpulan pernyataan SQL yang dapat dieksekusi dalam beberapa cara. Sebagian besar DBM utama mendukung prosedur tersimpan; Namun, tidak semua melakukannya. Anda perlu memverifikasi dengan dokumentasi bantuan DBMS khusus Anda untuk spesifik. Karena saya paling akrab dengan SQL Server, saya akan menggunakannya sebagai sampel saya.
Untuk membuat prosedur tersimpan, sintaksnya cukup sederhana:
CREATE PROCEDURE <owner>.<procedure name>
<Param> <datatype>
AS
<Body>
Jadi misalnya:
CREATE PROCEDURE Users_GetUserInfo
@login nvarchar(30)=null
AS
SELECT * from [Users]
WHERE ISNULL(@login,login)=login
Manfaat dari prosedur tersimpan adalah Anda dapat memusatkan logika akses data ke satu tempat yang kemudian mudah bagi DBA untuk dioptimalkan. Prosedur tersimpan juga memiliki manfaat keamanan karena Anda dapat memberikan hak eksekusi ke prosedur tersimpan tetapi pengguna tidak perlu memiliki izin baca / tulis pada tabel yang mendasarinya. Ini adalah langkah pertama yang baik terhadap injeksi SQL.
Prosedur tersimpan memang memiliki kelemahan, pada dasarnya pemeliharaan terkait dengan operasi CRUD dasar Anda . Katakanlah untuk setiap tabel Anda memiliki Sisipan, Perbarui, Hapus dan setidaknya satu pilih berdasarkan kunci utama, itu berarti setiap tabel akan memiliki 4 prosedur. Sekarang ambil database ukuran yang layak dari 400 tabel, dan Anda memiliki 1.600 prosedur! Dan itu dengan asumsi Anda tidak memiliki duplikat yang mungkin Anda inginkan.
Di sinilah menggunakan ORM atau metode lain untuk secara otomatis menghasilkan operasi CRUD dasar Anda memiliki banyak manfaat.
Prosedur tersimpan adalah seperangkat pernyataan SQL yang dikompilasi yang digunakan untuk melakukan tugas khusus.
Contoh: Jika saya punya Employee
meja
Employee ID Name Age Mobile
---------------------------------------
001 Sidheswar 25 9938885469
002 Pritish 32 9178542436
Pertama saya mengambil Employee
tabel:
Create Procedure Employee details
As
Begin
Select * from Employee
End
Untuk menjalankan prosedur pada SQL Server:
Execute Employee details
--- (Employee details is a user defined name, give a name as you want)
Lalu kedua, saya memasukkan nilai ke dalam Tabel Karyawan
Create Procedure employee_insert
(@EmployeeID int, @Name Varchar(30), @Age int, @Mobile int)
As
Begin
Insert Into Employee
Values (@EmployeeID, @Name, @Age, @Mobile)
End
Untuk menjalankan prosedur parametrized pada SQL Server:
Execute employee_insert 003,’xyz’,27,1234567890
--(Parameter size must be same as declared column size)
Contoh: @Name Varchar(30)
Dalam Employee
tabel Name
ukuran kolom harus varchar(30)
.
Prosedur tersimpan adalah sekelompok pernyataan SQL yang telah dibuat dan disimpan dalam database. Prosedur tersimpan akan menerima parameter input sehingga satu prosedur dapat digunakan melalui jaringan oleh beberapa klien menggunakan data input berbeda. Prosedur yang tersimpan akan mengurangi lalu lintas jaringan dan meningkatkan kinerja. Jika kami memodifikasi prosedur tersimpan, semua klien akan mendapatkan prosedur tersimpan yang diperbarui.
Contoh membuat prosedur tersimpan
CREATE PROCEDURE test_display
AS
SELECT FirstName, LastName
FROM tb_test;
EXEC test_display;
Keuntungan menggunakan prosedur tersimpan
Prosedur tersimpan memungkinkan pemrograman modular.
Anda dapat membuat prosedur sekali, menyimpannya di database, dan menyebutnya beberapa kali dalam program Anda.
Prosedur tersimpan memungkinkan eksekusi lebih cepat.
Jika operasi membutuhkan sejumlah besar kode SQL yang dilakukan berulang-ulang, prosedur tersimpan dapat lebih cepat. Mereka diurai dan dioptimalkan ketika mereka pertama kali dieksekusi, dan versi yang dikompilasi dari prosedur yang tersimpan tetap dalam cache memori untuk digunakan nanti. Ini berarti prosedur tersimpan tidak perlu diulang dan dioptimalkan kembali dengan setiap penggunaan, menghasilkan waktu eksekusi yang jauh lebih cepat.
Prosedur tersimpan dapat mengurangi lalu lintas jaringan.
Operasi yang membutuhkan ratusan baris kode Transact-SQL dapat dilakukan melalui pernyataan tunggal yang mengeksekusi kode dalam suatu prosedur, bukan dengan mengirimkan ratusan baris kode melalui jaringan.
Prosedur tersimpan memberikan keamanan yang lebih baik untuk data Anda
Pengguna dapat diberikan izin untuk menjalankan prosedur tersimpan bahkan jika mereka tidak memiliki izin untuk mengeksekusi pernyataan prosedur secara langsung.
Dalam SQL Server kami memiliki berbagai jenis prosedur tersimpan:
Prosedur yang disimpan sistem disimpan dalam database master dan ini dimulai dengan sp_
awalan. Prosedur ini dapat digunakan untuk melakukan berbagai tugas untuk mendukung fungsi SQL Server untuk panggilan aplikasi eksternal dalam tabel sistem
Contoh: sp_helptext [StoredProcedure_Name]
Prosedur tersimpan yang ditentukan pengguna biasanya disimpan dalam basis data pengguna dan biasanya dirancang untuk menyelesaikan tugas-tugas dalam basis data pengguna. Sementara coding prosedur ini tidak menggunakan yang sp_
awalan karena jika kita menggunakan sp_
awalan pertama, itu akan memeriksa database master, dan kemudian datang ke database yang ditetapkan pengguna.
Extended tersimpan prosedur adalah prosedur yang memanggil fungsi dari file DLL. Saat ini, prosedur tersimpan yang lama tidak digunakan lagi karena alasan itu akan lebih baik untuk menghindari menggunakan prosedur tersimpan yang diperpanjang.
Secara umum, prosedur tersimpan adalah "Fungsi SQL." Mereka memiliki:
-- a name
CREATE PROCEDURE spGetPerson
-- parameters
CREATE PROCEDURE spGetPerson(@PersonID int)
-- a body
CREATE PROCEDURE spGetPerson(@PersonID int)
AS
SELECT FirstName, LastName ....
FROM People
WHERE PersonID = @PersonID
Ini adalah contoh fokus T-SQL. Prosedur tersimpan dapat menjalankan sebagian besar pernyataan SQL, mengembalikan nilai skalar dan berbasis tabel, dan dianggap lebih aman karena mencegah serangan injeksi SQL.
Pikirkan situasi seperti ini,
CATATAN:
Prosedur tersimpan terutama digunakan untuk melakukan tugas-tugas tertentu pada database. Sebagai contoh
Prosedur tersimpan tidak lain adalah sekelompok pernyataan SQL yang dikompilasi menjadi satu rencana eksekusi.
Contoh: membuat prosedur tersimpan
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE GetEmployee
@EmployeeID int = 0
AS
BEGIN
SET NOCOUNT ON;
SELECT FirstName, LastName, BirthDate, City, Country
FROM Employees
WHERE EmployeeID = @EmployeeID
END
GO
Mengubah atau memodifikasi prosedur yang tersimpan:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE GetEmployee
@EmployeeID int = 0
AS
BEGIN
SET NOCOUNT ON;
SELECT FirstName, LastName, BirthDate, City, Country
FROM Employees
WHERE EmployeeID = @EmployeeID
END
GO
Jatuhkan atau hapus prosedur yang tersimpan:
DROP PROCEDURE GetEmployee
Prosedur tersimpan adalah seperangkat kumpulan pernyataan SQL yang dikompilasi yang melakukan beberapa tugas tertentu.
Prosedur yang disimpan harus dijalankan sendiri menggunakan EXEC
Prosedur tersimpan dapat mengembalikan beberapa parameter
Prosedur tersimpan dapat digunakan untuk menerapkan transaksi
"Apa itu prosedur tersimpan" sudah dijawab dalam posting lain di sini. Apa yang akan saya posting adalah satu cara yang kurang dikenal untuk menggunakan prosedur tersimpan. Itu grouping stored procedures
atau numbering stored procedures
.
Referensi Sintaks
; number
sesuai ini
Integer opsional yang digunakan untuk mengelompokkan prosedur dengan nama yang sama. Prosedur yang dikelompokkan ini dapat dijatuhkan bersama dengan menggunakan satu pernyataan PROSEDUR DROP
Contoh
CREATE Procedure FirstTest
(
@InputA INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)
END
GO
CREATE Procedure FirstTest;2
(
@InputA INT,
@InputB INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO
Menggunakan
exec FirstTest 10
exec FirstTest;2 20,30
Hasil
Upaya lain
CREATE Procedure SecondTest;2
(
@InputA INT,
@InputB INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO
Hasil
Msg 2730, Level 11, Status 1, Prosedur SecondTest, Baris 1 [Batch Start Line 3] Tidak dapat membuat prosedur 'SecondTest' dengan nomor grup 2 karena prosedur dengan nama yang sama dan nomor grup 1 saat ini tidak ada di data. Harus menjalankan PROSEDUR CREATE 'Tes Kedua'; 1 dulu.
Referensi :
PERINGATAN
Prosedur tersimpan adalah kumpulan bernama pernyataan SQL dan logika prosedural yaitu, dikompilasi, diverifikasi dan disimpan dalam database server. Prosedur tersimpan biasanya diperlakukan seperti objek basis data lainnya dan dikendalikan melalui mekanisme keamanan server.
Dalam DBMS, prosedur tersimpan adalah seperangkat pernyataan SQL dengan nama yang ditetapkan yang disimpan dalam database dalam bentuk yang dikompilasi sehingga dapat dibagikan oleh sejumlah program.
Penggunaan prosedur yang tersimpan dapat membantu
Menyediakan akses terkontrol ke data (pengguna akhir hanya dapat memasukkan atau mengubah data, tetapi tidak dapat menulis prosedur)
Memastikan integritas data (data akan dimasukkan secara konsisten) dan
Meningkatkan produktivitas (pernyataan dari prosedur tersimpan perlu ditulis hanya sekali)
untuk sederhana,
Stored Procedure adalah Stored Programs , Suatu program / fungsi yang disimpan ke dalam basis data.
Setiap program tersimpan berisi badan yang terdiri dari pernyataan SQL. Pernyataan ini dapat berupa pernyataan majemuk yang terdiri dari beberapa pernyataan yang dipisahkan oleh karakter titik koma (;).
CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
SET @x = 0;
REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;
Prosedur tersimpan dalam SQL Server dapat menerima parameter input dan mengembalikan beberapa nilai parameter output; dalam SQL Server, pernyataan program prosedur tersimpan untuk melakukan operasi dalam database dan mengembalikan nilai status ke prosedur panggilan atau kumpulan.
Manfaat menggunakan prosedur tersimpan di SQL Server
Mereka memungkinkan pemrograman modular. Mereka memungkinkan eksekusi lebih cepat. Mereka dapat mengurangi lalu lintas jaringan. Mereka dapat digunakan sebagai mekanisme keamanan.
Berikut adalah contoh prosedur tersimpan yang mengambil parameter, menjalankan kueri, dan mengembalikan hasilnya. Secara khusus, prosedur tersimpan menerima BusinessEntityID sebagai parameter dan menggunakannya untuk mencocokkan kunci utama tabel HumanResources.Employee untuk mengembalikan karyawan yang diminta.
> create procedure HumanResources.uspFindEmployee `*<<<---Store procedure name`*
@businessEntityID `<<<----parameter`
as
begin
SET NOCOUNT ON;
Select businessEntityId, <<<----select statement to return one employee row
NationalIdNumber,
LoginID,
JobTitle,
HireData,
From HumanResources.Employee
where businessEntityId =@businessEntityId <<<---parameter used as criteria
end
Saya belajar ini dari essential.com ... ini sangat berguna.
Dalam Stored Procedures, pernyataan hanya ditulis sekali dan mengurangi lalu lintas jaringan antara klien dan server. Kita juga bisa menghindari Serangan Injeksi Sql.
ORM
sukaEntity Framework
melakukanCRUD
operasi?