Τι είναι μια αποθηκευμένη διαδικασία; Πώς λειτουργούν; Ποια είναι η σύνθεση μιας αποθηκευμένης διαδικασίας (τα πράγματα που πρέπει να είναι αποθηκευμένη διαδικασία);
Οι αποθηκευμένες διαδικασίες είναι μια δέσμη εντολών SQL που μπορούν να εκτελεστούν με διάφορους τρόπους. Οι περισσότερες μεγάλες DBM υποστηρίζουν αποθηκευμένες διαδικασίες- ωστόσο, δεν το κάνουν όλες. Θα πρέπει να επαληθεύσετε την τεκμηρίωση βοήθειας του συγκεκριμένου ΣΔΒΔ για τις λεπτομέρειες. Καθώς είμαι πιο εξοικειωμένος με τον SQL Server, θα χρησιμοποιήσω αυτόν ως δείγμα.
Για να δημιουργήσετε μια αποθηκευμένη διαδικασία η σύνταξη είναι αρκετά απλή:
CREATE PROCEDURE <owner>.<procedure name>
<param> <datatype>
AS
<Body>
Έτσι, για παράδειγμα:
CREATE PROCEDURE Users_GetUserInfo
@login nvarchar(30)=null
AS
SELECT * from [Users]
WHERE ISNULL(@login,login)=login
Ένα πλεονέκτημα των αποθηκευμένων διαδικασιών είναι ότι μπορείτε να συγκεντρώσετε τη λογική πρόσβασης στα δεδομένα σε ένα μόνο μέρος, το οποίο είναι στη συνέχεια εύκολο για τον DBA's να βελτιστοποιήσει. Οι αποθηκευμένες διαδικασίες έχουν επίσης ένα πλεονέκτημα ασφάλειας, καθώς μπορείτε να δώσετε δικαιώματα εκτέλεσης σε μια αποθηκευμένη διαδικασία, αλλά ο χρήστης δεν θα πρέπει να έχει δικαιώματα ανάγνωσης/εγγραφής στους υποκείμενους πίνακες. Αυτό είναι ένα καλό πρώτο βήμα ενάντια στην έγχυση SQL.
Οι αποθηκευμένες διαδικασίες έχουν και μειονεκτήματα, βασικά τη συντήρηση που σχετίζεται με τη βασική σας λειτουργία CRUD. Ας πούμε ότι για κάθε πίνακα έχετε μια εισαγωγή, ενημέρωση, διαγραφή και τουλάχιστον μια επιλογή με βάση το πρωτεύον κλειδί, αυτό σημαίνει ότι κάθε πίνακας θα έχει 4 διαδικασίες. Τώρα πάρτε μια βάση δεδομένων αξιοπρεπούς μεγέθους με 400 πίνακες και έχετε 1600 διαδικασίες! Και αυτό υποθέτοντας ότι δεν έχετε διπλότυπα, που πιθανώς θα έχετε.
Εδώ είναι που η χρήση ενός ORM ή κάποιας άλλης μεθόδου για την αυτόματη δημιουργία των βασικών σας CRUD διαδικασιών έχει μεγάλη αξία.
Μια αποθηκευμένη διαδικασία είναι ένα σύνολο προμεταγλωττισμένων εντολών SQL που χρησιμοποιούνται για την εκτέλεση μιας ειδικής εργασίας.
Παράδειγμα: Εάν έχω έναν πίνακα "Εργαζόμενοι".
Employee ID Name Age Mobile
---------------------------------------
001 Sidheswar 25 9938885469
002 Pritish 32 9178542436
Αρχικά ανακτώ τον πίνακα "Εργαζόμενος":
Create Procedure Employee details
As
Begin
Select * from Employee
End
Για να εκτελέσω τη διαδικασία στον SQL Server:
Execute Employee details
--- (Employee details is a user defined name, give a name as you want)
Στη συνέχεια, δεύτερον, εισάγω την τιμή στον πίνακα Employee Table
Create Procedure employee_insert
(@EmployeeID int, @Name Varchar(30), @Age int, @Mobile int)
As
Begin
Insert Into Employee
Values (@EmployeeID, @Name, @Age, @Mobile)
End
Για να εκτελέσετε τη διαδικασία με παραμέτρους στον SQL Server:
Execute employee_insert 003,’xyz’,27,1234567890
--(Parameter size must be same as declared column size)
Παράδειγμα: @Όνομα Varchar(30)
Στον πίνακα Employee
το μέγεθος της στήλης Name
πρέπει να είναι varchar(30)
.
Γενικά, μια αποθηκευμένη διαδικασία είναι μια "SQL Function." Έχουν:
-- 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
Αυτό είναι ένα παράδειγμα που επικεντρώνεται στην T-SQL. Οι αποθηκευμένες διαδικασίες μπορούν να εκτελέσουν τις περισσότερες εντολές SQL, να επιστρέψουν κλιμακωτές τιμές και τιμές που βασίζονται σε πίνακες και θεωρούνται πιο ασφαλείς επειδή αποτρέπουν τις επιθέσεις SQL injection.