Apa itu prosedur tersimpan?

298

Apa itu "prosedur tersimpan" dan bagaimana cara kerjanya?

Bagaimana susunan prosedur tersimpan (masing - masing hal harus menjadi prosedur tersimpan)?

M--
sumber

Jawaban:

243

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.

JoshBerke
sumber
1
Maksud Anda Prosedur Tersimpan untuk membaca data dan ORMsuka Entity Frameworkmelakukan CRUDoperasi?
shaijut
2
Ya itu satu pendekatan yang mungkin. Kami menggunakan ORM untuk segalanya kecuali laporan
JoshBerke
Untuk detail lebih lanjut tentang prosedur tersimpan, Anda dapat merujuk URL saya techflirt.com/mysql-stored-procedure-tutorial
Ankur Kumar Singh
150

Prosedur tersimpan adalah seperangkat pernyataan SQL yang dikompilasi yang digunakan untuk melakukan tugas khusus.

Contoh: Jika saya punya Employeemeja

Employee ID  Name       Age  Mobile
---------------------------------------
001          Sidheswar  25   9938885469
002          Pritish    32   9178542436

Pertama saya mengambil Employeetabel:

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 Employeetabel Nameukuran kolom harus varchar(30).

sidhewsar
sumber
1
contoh yang mudah dimengerti
HaFiz Umer
80

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 tersimpan sistem
    • Prosedur tersimpan yang ditentukan pengguna
    • Prosedur tersimpan yang diperpanjang
  • 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.

Kanwar Singh
sumber
37

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.

Dave Swersky
sumber
16

Pikirkan situasi seperti ini,

  • Anda memiliki database dengan data.
  • Ada sejumlah aplikasi berbeda yang diperlukan untuk mengakses database pusat itu, dan di masa depan beberapa aplikasi baru juga.
  • Jika Anda akan memasukkan kueri basis data inline untuk mengakses basis data pusat, di dalam masing-masing kode aplikasi, maka mungkin Anda harus menduplikasi kueri yang sama berulang-ulang di dalam kode aplikasi yang berbeda.
  • Dalam situasi seperti itu, Anda dapat menggunakan prosedur tersimpan (SP). Dengan prosedur tersimpan, Anda menulis sejumlah pertanyaan umum (prosedur) dan menyimpannya dengan database pusat.
  • Sekarang duplikasi pekerjaan tidak akan pernah terjadi seperti sebelumnya dan akses data dan pemeliharaan akan dilakukan secara terpusat.

CATATAN:

  • Dalam situasi di atas, Anda mungkin bertanya-tanya, "Mengapa kami tidak dapat memperkenalkan server akses data pusat untuk berinteraksi dengan semua aplikasi? Ya. Itu akan menjadi alternatif yang mungkin. Tapi,
  • Keuntungan utama dengan SP atas pendekatan itu adalah, tidak seperti kode akses-data Anda dengan kueri inline, SP adalah pernyataan yang dikompilasi sebelumnya, sehingga mereka akan mengeksekusi lebih cepat. Dan biaya komunikasi (melalui jaringan) akan minimal.
  • Berlawanan dengan itu, SPs akan menambahkan beberapa beban lagi ke server database. Jika itu akan menjadi perhatian sesuai situasi, server akses data terpusat dengan kueri inline akan menjadi pilihan yang lebih baik.
Supun Wijerathne
sumber
9

Prosedur tersimpan terutama digunakan untuk melakukan tugas-tugas tertentu pada database. Sebagai contoh

  • Dapatkan set hasil basis data dari beberapa logika bisnis pada data.
  • Menjalankan beberapa operasi basis data dalam satu panggilan.
  • Digunakan untuk memigrasi data dari satu tabel ke tabel lain.
  • Dapat dipanggil untuk bahasa pemrograman lain, seperti Java.
MAA
sumber
7

Prosedur tersimpan tidak lain adalah sekelompok pernyataan SQL yang dikompilasi menjadi satu rencana eksekusi.

  1. Buat satu kali dan panggil n beberapa kali
  2. Ini mengurangi lalu lintas jaringan

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
pengguna5723819
sumber
6

Prosedur tersimpan digunakan untuk mengambil data, memodifikasi data, dan menghapus data dalam tabel database. Anda tidak perlu menulis seluruh perintah SQL setiap kali Anda ingin menyisipkan, memperbarui atau menghapus data dalam database SQL.

venkat
sumber
4
  • 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

Kedarnath MS
sumber
4

"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 proceduresatau numbering stored procedures.

Referensi Sintaks

masukkan deskripsi gambar di sini

; numbersesuai 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

masukkan deskripsi gambar di sini

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 :

  1. BUAT PROSEDUR dengan sintaks untuk angka
  2. Prosedur Tersimpan Bernomor dalam SQL Server - techie-friendly.blogspot.com
  3. Pengelompokan Prosedur Tersimpan - sqlmag

PERINGATAN

  1. Setelah Anda mengelompokkan prosedur, Anda tidak dapat menjatuhkannya satu per satu.
  2. Fitur ini dapat dihapus di versi masa depan Microsoft SQL Server.
Lijo
sumber
0

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.

Nirmala Hansdak
sumber
0

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

  1. Menyediakan akses terkontrol ke data (pengguna akhir hanya dapat memasukkan atau mengubah data, tetapi tidak dapat menulis prosedur)

  2. Memastikan integritas data (data akan dimasukkan secara konsisten) dan

  3. Meningkatkan produktivitas (pernyataan dari prosedur tersimpan perlu ditulis hanya sekali)

Naina
sumber
0

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;
AZinkey
sumber
0

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.

Jerold Joel
sumber
0

Stored Procedure akan membantu Anda membuat kode di server. Anda dapat melewati parameter dan menemukan output.

create procedure_name (para1 int,para2 decimal)
as
select * from TableName
Biddut
sumber
0

Dalam Stored Procedures, pernyataan hanya ditulis sekali dan mengurangi lalu lintas jaringan antara klien dan server. Kita juga bisa menghindari Serangan Injeksi Sql.

  • Jika Anda menggunakan program pihak ketiga dalam aplikasi Anda untuk memproses pembayaran, di sini basis data hanya akan memaparkan informasi yang diperlukan dan aktivitas yang diizinkan oleh pihak ketiga ini, dengan ini kami dapat mencapai kerahasiaan data dengan menetapkan izin menggunakan Stored Procedures.
  • Pemutakhiran tabel hanya boleh dilakukan ke tabel yang ditargetkan tetapi tidak boleh memperbarui tabel lainnya, yang dengannya kita dapat mencapai integritas data menggunakan pemrosesan transaksi dan penanganan kesalahan.
  • Jika Anda ingin mengembalikan satu atau lebih item dengan tipe data maka lebih baik menggunakan parameter output.
  • Dalam Stored Procedures, kami menggunakan parameter output untuk apa pun yang perlu dikembalikan. Jika Anda ingin mengembalikan hanya satu item dengan hanya tipe data integer maka lebih baik gunakan nilai balik. Sebenarnya nilai pengembalian hanya untuk menginformasikan keberhasilan atau kegagalan Prosedur yang Disimpan.
Abhishek Duppati
sumber