MS SQL Stored Procedure
Stored Procedure
Salam dostlar bu məqalədə MS SQL Stored Procedure haqqında danışacağıq. Stored Procedure,saved procedure-də deyə bilərik.
Azərbaycan dilində saxlanılmış üsul olaraq tərcümə olunur.
Stored Procedure SQL Server Database üzərində tutulan SQL sorğularından ibarət olur.Məsəlçün bir və ya bir neçə cədvəl(table)-dən JOIN edərək yazdığımız sorğunu(query) stored procedure yaradaraq daxilində saxlayırırq.
Hemin sorgunu sadə EXECUTE deyərək getiririk.Bununlada hər dəfə sorgunu yenidən yazmağa və ya databaseden kənarda hardasa save eləməyə ehtiyac yoxdur.Yaddaşda saxladığımız sorğuya parametr təyin edərək filtirləmə yolu ilə istədiyimiz məlumati filtirləyib gətirə bilərik.Parametrlər haqqında birazdan danışacağıq.
Stored Procedure Database serverdə saxlanılır və buna görədə çox sürətlə işləyir.Network yükünü azaldır.Sürətli işləməsinin səbəbi bir dəfə tərtib olunduqdan sonra yenidən tərtib olunmağa ehtiyac olmamasıdır.
Stored Procedurun nə işə yaradığından danışdıq
Stored Procedurun özəlliklərindən danışaq:
Parametr və parametrsiz işlənir.Parametrlər Stored Procedurun özəlliklərindəndir.Parametrsiz Stored Procedure heç bir şərt qoyulmamış və filtirləmə edilməmiş sorguya bənəzyir.Məsəlçün SELECT * FROM Technet bu sorğu kimi.
Başlayaq Stored Procedure necə yaradılır və parametrlər necə təyin olunur ondan danışmağa.
Stored Procedure CREATE əmri ilə yaradılır.İlk öncə müvafiq bazamız üzrə prosedurumuzda tətbiq edəcəyimiz table(cədvəl) seçirik və həmin table üzərində sorğular yazıb Stored Procedure-də yerləşdiriik.
Qeyd edim ki bir neçə cədvəllərdən JOIN edərək yazdığımız sorğunu prosedurumuzda yerləşdirə bilərik.
Sonra həmin bir və ya bir neçə cədvəldən (JOIN edərək) yazdığımız sorğunu procedure daxilində yerləşdirdikdən sonra parametr şəklində (execute) icra edə bilərik.
Deyəkki Kurs adli bazamız var müvafiq olaraq məllimlər və tələbələr haqqında məlumatları özündə saxlayan (table) sütunlarımız var.
İlk öncə Stored Procedure yaradacıq sonra dbo.Student_Info sütunundan sorğu yazaraq proceduramızda yerləşdirəcəyik.Bir neçə sütundan JOIN edərək yazdığımız sorğu əsasında Stored Procedure yarada bilərik,tək sütundan yazdığımız sorğu əsasındada.Hələlik asan başa düşülsün deyə dbo.Student_Info cədvəlindən sorğu yazıb onun əsasında Stored Procedure yaradaq.
İlk öncə dbo.Student_Info sütunumuzu SELECT edək görə hansı sətirlərimiz (row) var.
SELECT * FROM dbo.Student_Info
Cədvəlimizdəki məlumatları gördük indi isə Prosedur yaradıb müvafiq cədvəlimizdən sorğu yazaraq procedurada yerləşdirək.
Stored Procedure yaratmağın qaydasına diqqət edək.
CREATE PROC spStudentInfo @Ölkə NVARCHAR(50)
AS
BEGIN
SELECT first_name,Lastname,Country
FROM dbo.Student_Info
WHERE Country=@Ölkə
END
Sorğuda first_name,Lastname,Country-ni sorğu etsək kifayət edər.
İndi isə yaratdıqlarımızı izah edib başa düşməyə çalışaq.
Stored Procedure yaradarkən CREATE əmrindən sonra PROCEDURE və ya qısaca PROC yazırıq.Procdən yazdığımız spStudentInfo Stored Proceduraya verdiyimiz addır mütləq lazımdır və istədiyimiz adı qeyd edə bilərik.Əsas cədvəlin adı ilə eyni olma məcburluğu yoxdur.Qarşısında sp yazmağımız Stored Procedure olduğunu bildirir.@Ölkə NVARCHAR(50) Stored Proceduraya verdiyimiz parametr və ona təyin etdiyimiz verilən tipidir,hansıki parametrə məqaləmizin əvvəlində Stored Procedurun özəlliklərindən biri olduğunu demişdik.Parametirin əvvəlinə elektron poct simvolu yəni @ mütləq əlavə edirik.Sonra həmin simvoldan sonra sorğumuzun WHERE ifadəsində filtirləmə edəcəyimiz sütunu qeyd edirik.Biz müvafiq ölkəyə görə filtirləmə edib tələbələri ölkə üzrə sorğu etməliyik.Sonra parametr üçün tip təyin edirik.Biz NVARCHAR(50) teyin edirik.
Qeyd edim ki parametrə verdiyimiz metn tipi cədvəlimizdəki Country sütununun tipi ilə eyni olmalıdır.
AS deyərək prosedurumuzda yerləşdirmək istediyimiz sorğumuzu yerləşdiririk.AS-dən sonra BEGIN və sonda END yazmaq vacib deyil.Sorğumuzu gözəlləşdirmək üçün qeyd edə bilərik
CREATE PROC spStudentInfo @Ölkə NVARCHAR(50)
AS
BEGIN
SELECT first_name,Lastname,Country
FROM dbo.Student_Info
WHERE Country=@Ölkə
END
AS-dən sonra sorğumuzu əlavə etdik.İndi isə WHERE şərtində yazdığımız Country=@Ölkə şərtinə diqqət edək.Filtirləmədəki @Ölkə Stored Procedure yaradarkən əlavə etdiyimiz @Ölkə NVARCHAR(50)-nin eynisidir.WHERE şərtində demək istədiyimiz odur ki Country = bərabər olsun yuxarıda parametirdə qeyd edəcəyimiz şərtə.Birazdan dahada aydın olacaq.
Sorğumuzu icra edib Commands completed successfully mesajını alırıq.
İndi isə yaratdığımız Stored Procedurun yerləşdiyi yerə baxaq və icra(execute) edək.
Yaratmış olduğumuz proseduralar Programmability,Stored Procedures bölməsində yerləşir.Gördüyümüz kimi başqa Stored Proceduralarda var,göy ilə işarə olunmuş bizim ən son yaratdığımızdır.
Diqqet etsəniz System Stored Procedures bölməsi var.Orda sistem tərəfindən təyin olunan proseduralar yerləşir.
İki cür Stored Procedures var
1)System-defined Stored Procedures.(Sistem tərəfindən təyin olunan)
2)User-defined Stored Procedures.(İstifadəçi tərəfindən təyin olunan)
Bizim yaratdığımız User-defined katagoriyasına aiddir.
Yaratdığımız proseduru icra edək.
Stored Procedureni EXECUTE və ya qisaca EXEC yazaraq çağırırıq.
Əgər Stored Procedurumuza parametr təyin etməmişiksə o zaman EXEC-dən sonra prosedurun adını yazmağımız kifayət edir.Sorğumuz dərhal işə düşəcək.
Yox əgər parametr təyin etmişiksə EXEC-den sonra yalnız prosedurun adını yazmaq kifayət etməz.Dərhal parametr qeyd et deyə ERROR almış olarıq.Yoxlayaq
Gördüyümüz kimi error alırıq.Parametr əlavə etməli olduğmuzu başa düşürük.
1)Sorğumuza Azərbaycan əlavə edirik.Azərbaycan üzrə olan tələbələri sorğu edirik.Aldığımız nəticəyə baxaq.
EXEC spStudentInfo Azərbaycan
Gördüyümüz kimi ölkəsi Azərbaycan olan tələbələri sorğu etmiş oluruq.
2)İndiysə ölkəsi Gürcüstan olan tələbələri sorğu edək
EXEC spStudentInfo Gürcüstan
3)Növbəti olaraq ölkəsi Amerika olan tələbələri sorğu edək
EXEC spStudentInfo America
Gördüyümüz kimi prosedur daxilinə əlavə etdiyimiz sorğu işə düşür.
Deməli son olaraq bu məqama diqqət edək dahada aydın olacaq.
CREATE PROC spStudentInfo @Ölkə NVARCHAR(50)
AS
BEGIN
SELECT first_name,Lastname,Country
FROM dbo.Student_Info
WHERE Country=@Ölkə Yəni Stored Procedure yaradarkən procedure adından sonra qeyd edəcəyimiz parametirə bərabər olsun və
EXEC spStudentInfo-dan sonra yazdığımız Azərbaycan və s kimi ölkə adına bərabər olsun.
END
Deməli EXEC spStudentInfo Azərbaycan deməklə
WHERE Country=Azərbaycan demiş oluruq.
Dostlar Stored Proceduru nəzəridən əlavə praktiki olaraqda icra etdik ümid edirəm ki etraflı izah edə bildim.Qaranlıq məqamları commentdə bildirə bilərsiniz.
Növbəti məqaləmizdə Stored Procedure-yə DML əmrlərindən olan INSERT,UDATE,DELETE əmrlərini necə icra olunduğuna baxacağıq.Növbəti məqalədə görüşənədək.