SQL verilənlər bazasında saxlanan prosedurlar. Saxlanılan prosedurun T-SQL-ə dəyişdirilməsi ALTER PROCEDURE ifadəsidir. Prosedurları yerinə yetirmək üçün imtiyazlar

Microsoft-da SQL Serveröz alqoritmlərini həyata keçirmək və avtomatlaşdırmaq ( hesablamalar) saxlanılan prosedurlardan istifadə edə bilərsiniz, ona görə də bu gün onların necə yaradıldığı, dəyişdirildiyi və silindiyi haqqında danışacağıq.

Ancaq əvvəlcə T-SQL-də saxlanılan prosedurların nə olduğunu və nə üçün olduğunu başa düşməyiniz üçün kiçik bir nəzəriyyə.

Qeyd! Təcrübəsiz proqramçılar üçün T-SQL mövzusunda aşağıdakı faydalı materialları tövsiyə edirəm:

  • T-SQL dilini daha ətraflı öyrənmək üçün mən də kitabı oxumağı məsləhət görürəm - T-SQL Proqramçısının Yolu. Transact-SQL Təlimatı.

T-SQL-də saxlanılan prosedurlar hansılardır?

Saxlanılan prosedurlar- Bunlar alqoritmin SQL təlimatları toplusu şəklində yerləşdirildiyi verilənlər bazası obyektləridir. Başqa sözlə, deyə bilərik ki, saxlanılan prosedurlar verilənlər bazası daxilindəki proqramlardır. Saxlanılan prosedurlar serverdə təkrar istifadə edilə bilən kodu saxlamaq üçün istifadə olunur, məsələn, siz alqoritm, ardıcıl hesablama və ya çox addımlı SQL ifadəsi yazmısınız və hər dəfə daxil edilmiş bütün təlimatları yerinə yetirmək üçün deyil. bu alqoritm, Siz onu saxlanılan prosedur kimi təşkil edə bilərsiniz. Bu halda, siz SQL proseduru yaratdığınız zaman server kodu tərtib edir və hər dəfə bunu işə saldığınız zaman SQL prosedurları server artıq onu yenidən tərtib etməyəcək.

SQL Serverdə saxlanılan proseduru yerinə yetirmək üçün onun adından əvvəl EXECUTE əmrini yazmaq lazımdır, bu EXEC əmrini stenoqramda da yazmaq olar. SELECT ifadəsində saxlanılan proseduru çağırın, məsələn, funksiya artıq işləməyəcək, yəni. prosedurlar ayrıca həyata keçirilir.

Saxlanılan prosedurlarda, funksiyalardan fərqli olaraq, məlumatların dəyişdirilməsi əməliyyatlarını yerinə yetirmək artıq mümkündür: UNSERT, UPDATE, DELETE. Həmçinin, prosedurlarda, demək olar ki, hər hansı bir SQL ifadəsindən istifadə edə bilərsiniz, məsələn, CREATE TABLE cədvəllər yaratmaq və ya EXECUTE, yəni. digər prosedurları çağırmaq. İstisna bir neçə növ təlimatdır, məsələn: funksiyaların, görünüşlərin, tetikleyicilerin yaradılması və ya dəyişdirilməsi, sxemlərin yaradılması və bir neçə digər oxşar təlimatlar, məsələn, saxlanılan prosedurda verilənlər bazası bağlantısı kontekstini (USE) dəyişdirmək də mümkün deyil. .

Saxlanılan prosedurun giriş parametrləri və çıxış parametrləri ola bilər, o, cədvəl məlumatları qaytara bilər, heç nə qaytarmaya bilər, ancaq onun içindəki təlimatları yerinə yetirir.

Saxlanılan prosedurlar çox faydalıdır, onlar bizə bir çox əməliyyatları avtomatlaşdırmağa və ya sadələşdirməyə kömək edir, məsələn, pivot cədvəllərindən istifadə edərək daim müxtəlif mürəkkəb analitik hesabatlar yaratmalısınız, yəni. PIVOT operatoru. Bu operatorla sorğuların formalaşmasını sadələşdirmək üçün ( Bildiyiniz kimi, PIVOT sintaksisi olduqca mürəkkəbdir), sizin üçün dinamik olaraq xülasə hesabatları yarada biləcək bir prosedur yaza bilərsiniz, məsələn, "T-SQL-də Dinamik PIVOT" materialında bu xüsusiyyətin saxlanılan prosedur şəklində həyata keçirilməsi nümunəsi təqdim olunur.

Microsoft SQL Serverdə saxlanılan prosedurlarla işləmək nümunələri

Nümunələr üçün ilkin məlumatlar

Aşağıdakı bütün nümunələr Microsoft SQL Server 2016 Express-də yerinə yetiriləcək. Saxlanılan prosedurların real verilənlərlə necə işlədiyini nümayiş etdirmək üçün bizə bu məlumat lazımdır, gəlin onu yaradaq. Məsələn, bir test cədvəli yaradaq və ona bəzi qeydlər əlavə edək, tutaq ki, bu, qiymətləri ilə məhsulların siyahısını ehtiva edən bir cədvəl olacaq.

Cədvəl yaratma bəyanatı CREATE TABLE TestCədvəli( INT IDENTITY(1,1) NOT NULL, INT NOT NULL, VARCHAR(100) NOT NULL, MONEY NULL) GO -- Məlumat ifadəsi əlavə edin INSERT INTO TestTable(CategoryId, ProductName, Price) DƏYƏRLƏR (1) , "Siçan", 100), (1, "Klaviatura", 200), (2, "Telefon", 400) GO -- TestCədvəli sorğusundan SEÇİN *

Məlumat var, indi saxlanılan prosedurların yaradılmasına keçək.

T-SQL-də saxlanılan prosedurun yaradılması - CREATE PROCEDURE bəyanatı

Saxlanan prosedurlar ifadədən istifadə etməklə yaradılır PROSEDUR YARATIN, bu təlimatdan sonra prosedurunuzun adını yazmalısınız, sonra lazım olduqda mötərizədə giriş və çıxış parametrlərini təyin etməlisiniz. Bundan sonra AS açar sözünü yazır və təlimat blokunu açırsınız açar söz BAŞLA, bağla bu blok SON sözü. Bu blokun içərisində siz alqoritminizi və ya bir növ ardıcıl hesablamanı həyata keçirən bütün təlimatları yazırsınız, başqa sözlə, T-SQL-də proqramlaşdırırsınız.

Məsələn, əlavə edəcək saxlanılan prosedur yazaq yeni rekord, yəni. test qrafikimizə yeni element. Bunun üçün biz üç giriş parametrini təyin edəcəyik: @CategoryId - məhsul kateqoriyası ID, @ProductName - məhsul adı və @Price - məhsulun qiyməti, verilmiş parametr bizdə isteğe bağlı olacaq, yəni. prosedura keçə bilməz ( məsələn, qiyməti hələ bilmirik), bunun üçün onun tərifində standart dəyəri təyin edəcəyik. Bu parametrlər prosedurun gövdəsindədir, yəni. BEGIN…END blokunda adi dəyişənlərlə eyni şəkildə istifadə edilə bilər ( Bildiyiniz kimi, dəyişənlər @ işarəsi ilə işarələnir). Əgər çıxış parametrlərini təyin etməlisinizsə, parametr adından sonra OUTPUT açar sözünü ( və ya qısaldılmış OUT).

BEGIN…END blokunda məlumatların əlavə edilməsi üçün təlimat, həmçinin prosedurun sonunda SELECT ifadəsi yazacağıq ki, saxlanılan prosedur yeniləri nəzərə alaraq göstərilən kateqoriyadakı məhsullar haqqında cədvəl məlumatları qaytarsın. yeni məhsul əlavə edildi. Həmçinin bu saxlanılan prosedurda mən daxil olan parametrin işlənməsini, yəni təsadüfən bir neçə boşluq daxil edildiyi halların qarşısını almaq üçün mətn sətirinin əvvəlində və sonunda əlavə boşluqların çıxarılmasını əlavə etdim.

Bu prosedurun kodu budur Mən də buna münasibət bildirmişəm).

Proseduru yaradın CREATE PROCEDURE TestProseduru (--Gələn parametrlər @CategoryId INT, @ProductName VARCHAR(100), @Price MONEY = 0) BAŞLADILAR --Alqoritminizi həyata keçirən təlimatlar --Gələn parametrlərin işlənməsi --Başlanğıcda əlavə boşluqları silin və mətn sətirinin sonunda SET @ProductName = LTRIM(RTRIM(@MəhsulAdı)); --Yeni giriş əlavə edin INSERT INTO TestCədvəli(CategoryId, ProductName, Price) DƏYƏRLƏR (@CategoryId, @ProductName, @Price) --Dataları qaytarın * TestCədvəlindən CategoryId = @CategoryId SON GEÇİN

T-SQL-də saxlanan prosedurun icrası - EXECUTE əmri

EXECUTE və ya EXEC əmrindən istifadə edərək, artıq qeyd etdiyim kimi, saxlanılan proseduru icra edə bilərsiniz. Daxil olan parametrlər sadəcə onları sadalamaq və dəqiqləşdirməklə prosedurlara ötürülür. uyğun dəyərlər prosedurun adından sonra ( çıxış parametrləri üçün OUTPUT əmrini də göstərməlisiniz). Bununla belə, parametrlərin adı müəyyən edilə bilməz, lakin bu halda dəyərlərin təyin edilməsi ardıcıllığına riayət etmək lazımdır, yəni. giriş parametrlərinin təyin olunduğu ardıcıllıqla dəyərləri təyin edin ( bu çıxış parametrlərinə də aiddir).

Standart dəyərləri olan parametrlər müəyyən edilə bilməz, bunlar isteğe bağlı parametrlərdir.

Burada saxlanılan prosedurları, xüsusən bizim test prosedurumuzu yerinə yetirmək üçün bir neçə fərqli, lakin ekvivalent yollar var.

1. Qiyməti göstərmədən proseduru çağırın EXECUTE TestProcedure @CategoryId = 1, @ProductName = "Test product 1" --2. Biz EXEC TestProcedure @CategoryId = 1, @ProductName = "Sınaq məhsulu 2", @Qiymət = 300 --3 qiymətlə proseduru çağırırıq. EXEC parametrlərinin adını göstərmədən proseduru çağırırıq TestProcedure 1, "Test element 3", 400

Saxlanılan prosedurun T-SQL-ə dəyişdirilməsi - ALTER PROCEDURE bəyanatı

Təlimatlardan istifadə edərək prosedurun alqoritmində dəyişikliklər edə bilərsiniz PROSEDURU DƏYİŞTİRİN. Başqa sözlə, artıq mövcud olan proseduru dəyişdirmək üçün sadəcə CREATE PROCEDURE yerinə ALTER PROCEDURE yazmaq və lazım olduqda hər şeyi dəyişdirmək lazımdır.

Deyək ki, test prosedurumuza dəyişiklik etməliyik, deyin ki, @Price parametri, yəni. qiymət, biz bunu məcburi edəcəyik, bunun üçün biz standart dəyəri siləcəyik, həmçinin nəticədə əldə edilən məlumat dəstini əldə etməyə artıq ehtiyac duymayacağımızı təsəvvür edirik, bunun üçün sadəcə olaraq SELECT ifadəsini saxlanılan prosedurdan çıxaracağıq.

Proseduru dəyişdirin ALTER PROCEDURE TestProcedure (--Gələn parametrlər @CategoryId INT, @ProductName VARCHAR(100), @Price MONEY) BAŞLADILAR --Alqoritminizi həyata keçirən təlimatlar --Gələn parametrlərin işlənməsi --Başında və sonunda əlavə boşluqları silin mətn sətirlərinin SET @ProductName = LTRIM(RTRIM(@MəhsulAdı)); --Yeni rekord əlavə edin INSERT INTO TestCədvəlinə (KateqoriyaId, MəhsulAdı, Qiymət) DƏYƏRLƏR (@KateqoriyaId, @MəhsulAdı, @Qiymət) SON EDİN

T-SQL - DROP PROCEDURE bəyanatında saxlanılan prosedurun silinməsi

Lazım gələrsə, saxlanılan proseduru silə bilərsiniz, bu ifadədən istifadə etməklə edilir DÖNÜŞ PROSEDURU.

Məsələn, yaratdığımız test prosedurunu silək.

DÜŞMƏ PROSEDURU TestProseduru

Saxlanılan prosedurları silərkən xatırlamağa dəyər ki, əgər prosedura digər prosedurlar və ya SQL ifadələri tərəfindən istinad edilirsə, onu sildikdən sonra onlar xəta ilə uğursuz olacaqlar, çünki onların istinad etdiyi prosedur artıq mövcud deyil.

Məndə hər şey var, ümid edirəm material sizin üçün maraqlı və faydalı oldu, sağol!

Bu seriyanın əvvəlki məqaləsində biz cədvəllərdən məlumatları necə çıxarmaq, onların strukturunu dəyişdirmək, verilənlər bazası və onlarda olan obyektləri yaratmaq, dəyişdirmək və silmək yollarına baxdıq. Bu yazıda biz server DBMS-nə xas olan obyektlər haqqında daha ətraflı danışacağıq: görünüşlər, tetikleyiciler və saxlanılan prosedurlar.

Jurnalımızın 3'2000-ci sayında dərc olunmuş bu seriyanın birinci məqaləsində biz qeyd etmişdik ki, müasir server tərəfində olan DBMS-lərin əksəriyyəti baxışları, tetikleyicileri və saxlanılan prosedurları dəstəkləyir. Baxışlar Access, dBase, Clipper kimi bir çox masaüstü DBMS tərəfindən də dəstəklənir.

Qeyd etmək lazımdır ki, triggerlər və saxlanılan prosedurlar adətən SQL dilinin prosedur uzantıları olan proqramlaşdırma dillərində yazılır. Bu genişlənmələr SQL dilinin özündə olmayan do... halbuki, əgər... onda... başqa kimi alqoritmləri təsvir etməyə imkan verən ifadələri ehtiva edir (xatırlayırsınızsa, SQL qeyri-prosedur dilidir, və siz orada bir tapşırığı tərtib edə bilərsiniz, lakin onun icrası üçün alqoritmləri təsvir edə bilməzsiniz). Standarta uyğun gələn SQL dilindən fərqli olaraq, onun prosedur genişləndirmələri heç bir şəkildə standartlaşdırılmır və müxtəlif DBMS eyni alqoritmik konstruksiyaları həyata keçirmək üçün müxtəlif sintaksislərdən istifadə edir, lakin müxtəlif DBMS üçün SQL genişləndirmələrinin sintaksisindəki fərqlərin müzakirəsi bu mövzudan kənardadır. bu məqalənin əhatə dairəsi.

Baxışların, tetikleyicilerin və saxlanılan prosedurların necə istifadə oluna biləcəyini göstərmək üçün biz Microsoft SQL Server 7.0 və həmin verilənlər bazasına daxil olan NorthWind verilənlər bazasını seçdik.

Nümunələrə əməl etməzdən əvvəl lütfən nəzərə alın ki, DBMS-də tetikleyicilərin və saxlanılan prosedurların tətbiqi və saxlanması bu məqalədəkilərdən fərqli ola bilər. Bundan əlavə, server obyektlərini yaratmaq üçün verilənlər bazası administratoru tərəfindən verilmiş müvafiq icazələrə malik olmalısınız.

Nəzərə alın ki, bəzi ODBC sürücüləri DBMS-nin özü tərəfindən dəstəklənsə belə, müştəri proqramlarından saxlanılan prosedurların çağırılmasını dəstəkləmir. Bununla belə, bu halda, saxlanılan prosedurlar hələ də triggerlərdən çağırıla bilər.

Baxışlardan başlayaq, sonra saxlanılan prosedurları müzakirə edək və fəsli tetikleyicilərin icmalı ilə bitirək.

Nümayəndəlik

Görünüş, adətən bir və ya bir neçə cədvəldən sütunlar toplusunu ehtiva edən virtual cədvəldir. Əslində, görünüş məlumatlardan ibarət deyil, yalnız bu görünüşə daxil olarkən hansı verilənlərin və hansı cədvəllərdən götürüləcəyini dəqiq müəyyən edən SELECT SQL sorğusundan ibarətdir. Bu baxımdan görünüş saxlanılan sorğudur.

Əksər hallarda görünüşlər məlumat təhlükəsizliyi üçün istifadə olunur. Məsələn, istifadəçilərin bəzi kateqoriyaları görüntüyə daxil ola bilər, lakin məlumatları onu təşkil edən cədvəllərə deyil; əlavə olaraq, SQL sorğusu USER parametrini (istifadəçinin daxil olduğu ad) ehtiva edə bilər, bu halda görünüşə daxil olan zaman mövcud məlumatlar istifadəçi adından asılı olacaq.

Baxışların əsas xüsusiyyətləri aşağıda verilmişdir:

  • görünüşlər cədvəllər kimi davranır;
  • baxışlarda heç bir məlumat yoxdur;
  • görünüşlər birdən çox cədvəldəki məlumatlardan istifadə edə bilər.

Görünüş yaratmaq üçün CREATE VIEW SQL ifadəsindən, onu dəyişdirmək üçün ALTER VIEW ifadəsindən, silmək üçün isə DROP VIEW ifadəsindən istifadə edə bilərik.

Cari verilənlər bazası üçün görünüş yaratmağa imkan verən CREATE VIEW bəyanatı ilə başlayacağıq.

CREATE VIEW bəndi

Görünüş yaratmaq üçün sintaksis bir neçə əlavə açar sözlə SQL SELECT ifadəsinə bənzəyir. Aşağıda onun sadələşdirilmiş sintaksisi verilmişdir:

GÖRÜNÜŞ_adını seçim_bəyanatı KİMİ YARATIN

Görünüş_adı arqumenti görünüşün adına işarə edir. Microsoft SQL Serverində istifadə olunan açar söz, sistem şərhləri cədvəlində CREATE VIEW bəndinin mənbə mətnini gizlətməyə imkan verir.

AS açar sözü görünüşə daxil olduqda hansı SEÇİM sorğusunun həqiqətən icra olunacağını müəyyən edir. Nəzərə alın ki, bu sorğu ORDER BY, COMPUTE və ya COMPUTE BY, INTO açar sözlərindən ibarət ola bilməz və müvəqqəti cədvələ istinad edə bilməz.

Əvvəllər yaradılmış görünüşü dəyişdirmək üçün növbəti hissədə qısaca təsvir edilən ALTER VIEW bəndindən istifadə edin.

DROP VIEW bəndi

Bu bənd verilənlər bazasından görünüşü silmək üçün istifadə olunur. Qeyd edək ki, cədvəl verilənlər bazasından silindikdə ona istinad edən bütün görünüşlər də silinir. Bu bənddən istifadə edərək, silinəcək görünüşün adını qeyd etməliyik. Görünüş atıldıqdan sonra onun haqqında bütün məlumatlar sistem cədvəllərindən silinir.

Görünüşün ləğv edilməli olduğu başqa bir hal, görünüş yaradılandan bəri onun əsaslandığı cədvəllərin strukturunun dəyişməsidir. Bu halda siz görünüşü silə və sonra CREATE VIEW bəndindən istifadə edərək onu yenidən yarada bilərsiniz.

Görünüşlərin yaradılması və istifadəsi

CREATE VIEW bəndi müəyyən tələblərə cavab verən məlumatları əldə etməyə imkan verən görünüşlər yaratmaq üçün istifadə olunur. Görünüş cari verilənlər bazasında yaradılır və onun ayrıca obyekti kimi saxlanılır.

Görünüş yaratmağın ən yaxşı yolu SELECT sorğusu yaratmaq və onu təsdiq etdikdən sonra CREATE VIEW bəndinin çatışmayan hissəsini əlavə etməkdir. NorthWind verilənlər bazasında Kateqoriyaya görə Məhsullar görünüşü üçün mənbə koduna baxaq (Siyahı 1).

Qalın hərflərlə yazılmış birinci sətir görünüş yaratmaq üçün SQL ifadəsinin verilənlərin seçilməsi işini yerinə yetirən adi SELECT ifadəsindən necə fərqləndiyidir. Bu görünüşdə olan SEÇİM bəndi iki cədvəldən sahələri seçir - KATEQORİYALAR cədvəlindən KateqoriyaAdı sahəsi və MƏHSULLAR cədvəlindən ProductName, QuantityPerUnit, UnitsInStock, Dayandırılmış sahələri. Bundan sonra, iki cədvəlin məlumatları CategoryID sahəsi ilə əlaqələndirilir və yalnız anbarda olan məhsullar (HARADA açar sözündən sonra meyara baxın) nəticədə əldə edilən məlumat dəstinə daxil edilir. Bu görünüşə daxil olmağın nəticəsi Şəkildə göstərilmişdir. 1 .

İndi şərq bölgəsində bütün əraziləri göstərən görünüş yaradaq. Bu görünüş aşağıdakı sorğuya əsaslanır (Siyahı 2).

SELECT bəndinin istədiyimiz nəticələri qaytardığından əmin olduqdan sonra biz CREATE VIEW ifadəsini əlavə edirik və yaratdığımız görünüşü EASTTERR adlandırırıq (Siyahı 3).

Görünüş mətnini əl ilə yaratmaq əvəzinə, adətən DBMS-ə daxil olan vizual alətlərdən istifadə edə bilərsiniz. Əncirdə. Şəkil 2 eyni görünüşün Microsoft SQL Serverə daxil olan Enterprise Manager-in bir hissəsi olan View Designer alətindən istifadə etməklə necə yaradıla biləcəyini göstərir.

Görünüş Dizaynerinin yuxarı hissəsi cədvəllərin necə əlaqəli olduğunu və görünüşdə hansı sahələrin göstəriləcəyini təyin etməyə imkan verir. Aşağıda cədvəl və sahə ləqəblərini, onların dəyərlərinə məhdudiyyətləri, göstərmə üsulunu təyin edə bilərsiniz. Görünüşün mənbə mətni və onun icrasının nəticələri aşağıda verilmişdir.

İşimiz bitməzdən əvvəl qısa baxış baxışlar, onlar haqqında daha çox məlumat əldə etmək haqqında bir az danışaq. Microsoft SQL Server 7.0-da biz aşağıdakı sistemdə saxlanılan prosedurlardan istifadə edə bilərik:

  • Görünüş haqqında məlumat almaq üçün sp_help sistemində saxlanılan prosedurdan istifadə edə bilərsiniz. Məsələn, sp_help EastTerr yeni yaradılmış görünüş haqqında məlumatı qaytaracaq;
  • almaq üçün mənbə kodu view, siz sp_helptext saxlanılan prosedurdan istifadə edə bilərsiniz;
  • görünüşün asılı olduğu cədvəllərin siyahısını tapmaq üçün sp_depends sistemində saxlanılan prosedurdan istifadə edə bilərsiniz;
  • Görünüşün adını dəyişmək üçün sp_rename sistemində saxlanılan prosedurdan istifadə edə bilərsiniz.

IN bu bölmə müəyyən meyarlara cavab verən məlumatları əldə etmək üçün baxışlardan necə istifadə edəcəyimizə baxdıq. Ancaq son nümunəyə qayıdaq. NorthWind verilənlər bazasında dörd bölgə var və bütün bölgələrin ərazilərinin siyahısını əldə etmək üçün bizə dörd fərqli görünüş lazımdır. RegionID dəyərini parametr kimi ötürə bilsək, bu tapşırıq sadələşdirilə bilər. Bu, növbəti hissədə müzakirə edəcəyimiz saxlanılan prosedurdan istifadə etməklə edilə bilər.

Saxlanılan prosedurlar

Saxlanılan prosedur verilənlər bazasında adlandırılmış obyekt kimi saxlanılan və tək kod parçası kimi icra edilən SQL ifadələrinin tərtib edilmiş toplusudur. Saxlanan prosedurlar parametrləri qəbul edə və qaytara bilər. İstifadəçi saxlanılan proseduru yaratdıqda, server onu tərtib edir və paylaşılan keşdə yerləşdirir, bundan sonra tərtib edilmiş kod bir neçə istifadəçi tərəfindən istifadə edilə bilər. Tətbiq saxlanılan prosedurdan istifadə etdikdə, əgər varsa, parametrləri ona ötürür və server proseduru təkrar kompilyasiya etmədən yerinə yetirir.

Saxlanan prosedurlar proqram performansını yaxşılaşdırır. Birincisi, müştəri proqramından göndərilən adi SQL sorğuları ilə müqayisədə, onlar artıq tərtib edilib saxlandıqları üçün icraya hazırlaşmaq üçün daha az vaxt tələb edir. İkincisi, bu vəziyyətdə şəbəkə trafiki də SQL sorğusundan daha azdır, çünki şəbəkə üzərindən daha az məlumat ötürülür. düyü. 3 müştəri proqramı tərəfindən saxlanılan prosedura çağırışı təsvir edir.

Saxlanılan prosedurlar onların təsir etdiyi obyektlərə hər hansı dəyişiklik edildikdə avtomatik olaraq yenidən tərtib edilir; başqa sözlə, onlar həmişə aktualdırlar. Yuxarıda müzakirə edildiyi kimi, saxlanılan prosedurlar parametrləri qəbul edə bilər ki, bu da müxtəlif proqramlara müxtəlif giriş dəstləri ilə eyni prosedurdan istifadə etməyə imkan verir.

Saxlanan prosedurlar adətən məlumatların istinad bütövlüyünü qorumaq və biznes qaydalarını tətbiq etmək üçün istifadə olunur. Sonuncu əlavə çeviklik təmin edir, çünki biznes qaydaları dəyişərsə, müştəri tətbiqlərini dəyişdirmədən yalnız prosedurun əsas hissəsi dəyişdirilə bilər.

Prosedurların yaradılması, dəyişdirilməsi və silinməsi üçün xüsusi SQL ifadələri mövcuddur - CREATE PROCEDURE, ALTER PROCEDURE və DROP PROCEDURE. Növbəti hissədə onlara baxacağıq.

CREATE PROCEDURE bəndi

CREATE PROCEDURE bəndi saxlanılan prosedur yaratmaq üçün istifadə olunur. Aşağıdakı sadələşdirilmiş sintaksisə malikdir:

PROC proc_name CREATE [ (@parameter data_type) [= default] ] [...] AS sql_statements

Proc_name arqumenti saxlanılan prosedurun adını təyin edir, o, cari verilənlər bazasında unikal olmalıdır. @parameter arqumenti prosedur parametrini təyin edir. CREATE PROCEDURE bəndində bir və ya bir neçə parametr müəyyən edilə bilər. Parametr üçün standart dəyər yoxdursa, prosedur çağırılan zaman istifadəçi (və ya müştəri proqramı) tərəfindən ötürülməlidir. Microsoft SQL Server 7.0-də saxlanılan prosedur parametrlərinin sayı 1024 ilə məhdudlaşır; default olaraq onlar NULL ola bilər.

Bununla belə, nəzərə alın ki, bəzi ümumi məlumatlara giriş mexanizmləri saxlanılan prosedur parametrlərinin sayına əlavə məhdudiyyətlər qoya bilər. Məsələn, Oracle 8 üçün BDE sürücüsü yalnız 10-a qədər parametrli prosedurlarla işləyə bilər.

data_type arqumenti parametr üçün məlumat növünü təyin edir. Standart açar sözdən standart dəyərlər təyin etmək üçün istifadə edilə bilər - bu, sabit və ya NULL ola bilər. Defolt dəyər göstərilibsə, prosedur parametr dəyəri göstərilmədən çağırıla bilər. Əgər prosedur LIKE açar sözü ilə parametrdən istifadə edirsə, onun defolt dəyəri joker simvollardan ibarət ola bilər (%, _ və [^]).

OUTPUT açar sözü bunun qaytarma parametri olduğunu göstərir.

AS açar sözü, server üçün xüsusi SQL prosedur genişləndirməsində istənilən sayda SQL ifadələri və ifadələri şəklində prosedur tərəfindən yerinə yetiriləcək hərəkəti təyin edir.

CREATE PROCEDURE bəndi ilə yaradılmış prosedur cari verilənlər bazasında saxlanılacaq. Microsoft SQL Server-də prosedur adları sysobjects sistem cədvəlində, mənbə mətn isə syscomments cədvəlində saxlanılır.

Əvvəllər yaradılmış saxlanan proseduru dəyişdirmək üçün növbəti bölmədə qısaca təsvir olunan ALTER PROCEDURE bəndindən istifadə edin.

DÖNÜŞ PROSEDURU təklifi

Bu bənd saxlanılan prosedurları verilənlər bazasından silmək üçün istifadə olunur. DROP PROCEDURE bəndi bir arqument götürür, ləğv ediləcək prosedurun adı.

Saxlanılan prosedur silindikdə, onun məlumatı sysobjects və syscomments sistem cədvəllərindən silinir.

Saxlanılan Prosedurların Yaradılması və İstifadəsi

Baxışlar bölməsində qeyd etdik ki, NorthWind verilənlər bazasında dörd regiondan birini seçmək üçün RegionID dəyərini ehtiva edən görünüşə parametr ötürə bilsək, rahat olardı. Region ərazilərinin siyahısını qaytaran sorğuya bir daha nəzər salaq:

Territories.TerritoryDescription, Region.RegionDescription FROM Territories DAXİLİ QOŞULUN Bölgəyə Territories.RegionID = Region.RegionID WHERE Territories.RegionID = 1

Fərqli bir bölgə seçmək üçün sorğunun son sətirindəki WHERE bəndindəki şərti dəyişdirməliyik. Odur ki, dəyişəndən istifadə etsək (gəlin onu RegID adlandıraq), sorğunun digər hissələrini dəyişmədən dörd bölgədən birini seçə bilərik.

NorthWind verilənlər bazasında 1-dən 4-ə qədər nömrələnmiş dörd bölgə var. Bu o deməkdir ki, RegID dəyişəni tam tipli olmalıdır. Saxlanılan prosedur kodu aşağıda verilmişdir:

PROSEDUR YARADIN ShowRegion @RegID int Territories.TerritoryDescription, Region.RegionDescription FROM Territories.TerritoryDescription, Region.RegionDescription FROM INTER JOIN Region ON Territories.RegionID = Region.RegionID HERE Territories.RegionID = @RegID

Qeyd edək ki, biz demək olar ki, bütün SELECT sorğu mətnini toxunulmaz (kursivlə) qoyduq və yalnız yeni yaradılmış saxlanan prosedurun adı (birinci sətirdə), parametr bəyannaməsi (ikinci sətirdə) olan CREATE PROCEDURE bəndini əlavə etdik. , və əslində hərəkətləri yerinə yetirən cümlələrin əvvəlini göstərən AS açar sözü.

RegID =2 üçün SQL Server Query Analyzer-də yaradılmış prosedurun icrasının nəticəsi şək. 3 .

Aydındır ki, biz saxlanılan prosedurlardan yalnız genişləndirilmiş görünüşlər və ya "ağıllı" SELECT sorğuları üçün istifadə edə bilərik. Saxlanan prosedurlar bir çox rutin işləri avtomatlaşdırmaq üçün mexanizmlər təqdim edir.

Microsoft SQL Server 7.0-da biz müntəzəm saxlanılan prosedurlarla işləmək üçün sistemdə saxlanılan prosedurlardan da istifadə edə bilərik:

  • sp_stored_procedures - Saxlanılan prosedurların siyahısını göstərir.
  • sp_helptext - saxlanılan prosedurun mənbə mətnini göstərir;
  • sp_depends - Saxlanılan prosedurların asılılıqları haqqında məlumatı göstərir.
  • sp_procoption - Saxlanılan prosedur seçimlərini təyin edir və ya təyin edir;
  • sp_recompile - növbəti çağırış zamanı proseduru yenidən tərtib edir;
  • sp_rename - Prosedurun adını dəyişir.

Sistemdə saxlanılan prosedurlar

Söhbət Microsoft SQL Serverindən getdiyindən, onda həyata keçirilən çoxlu sayda sistem saxlanılan prosedurları qeyd etmək lazımdır. Sistemdə saxlanılan prosedur adları SP_ və ya XP_ ilə başlayır və əsas verilənlər bazasında saxlanılır. Biz yuxarıda çox istifadə olunan sistem saxlama prosedurlarından bəzilərini artıq təsvir etdik.

Qeyd edək ki, triggerlər məlumatı istifadəçiyə qaytarmamalıdır.

CREATE TRIGGER bəndində iki xüsusi cədvəldən istifadə edilə bilər. Məsələn, silinmiş və daxil edilmiş cədvəllər, tetikleyicinin təyin olunduğu cədvəllə eyni quruluşa malikdir və istifadəçi tərəfindən dəyişdirilmiş qeydlərin köhnə və yeni dəyərlərini ehtiva edir. Məsələn, silinmiş qeydləri tapmaq üçün aşağıdakı SQL ifadəsindən istifadə edə bilərik:

SEÇ * FROM silindi

Cədvəldə. 3 bütün mümkün məlumat dəyişiklikləri üçün silinmiş və daxil edilmiş cədvəllərin məzmununu göstərir.

Mövcud tetikleyicini dəyişdirmək üçün ALTER TRIGGER bəndindən istifadə edin. Bu barədə növbəti hissədə danışacağıq.

Əvvəlcə bu məlumatları ehtiva edən cədvələ iki yeni sahə əlavə etməliyik. Gəlin onları UpdatedBy (rekordu sonuncu dəfə yeniləyən menecerin adı) və UpdatedWhen (qeydin dəyişdirildiyi vaxt) adlandıraq. Sonra, KeepTrack adlı bir tətik yaradaq. Budur onun kodu:

TRIGGER YARADIN Müştərilərin YENİLƏNMƏSİ KİMİ YENİLƏNİN Müştərilər SET Customers.UpdatedBy = USER_NAME(), Customers.UpdatedWhen = GETDATE() FROM daxil, Müştərilər YERDƏ daxil edilir.CustomerID = Customers.CustomerID

Triggerin mənbə kodundan göründüyü kimi, Müştərilər cədvəlində hər INSERT və UPDATE əməliyyatından sonra icra olunur. Bu trigger Müştərilər.UpdatedBy sahəsində menecerin (verilənlər bazası istifadəçisi) adını və Müştərilər.UpdatedWhen sahəsində dəyişikliyin tarixi və vaxtını saxlayacaq. Bu məlumat daxil edilmiş müvəqqəti cədvəldən alınır.

Göründüyü kimi, bu trigger dəyişiklikləri izləməyə və cədvələ yeni qeydlər daxil etməyə imkan verir.

Tətiklər haqqında qısa icmalı bitirməzdən əvvəl, mövcud triggerlər haqqında məlumatı harada tapa biləcəyinizi sizə bildirməliyik. Sysobjects cədvəli tetikleyiciler və onların növləri haqqında məlumatı saxlayır, syscomments cədvəli isə onların mənbə kodunu ehtiva edir.

Nəticə

Bu hissədə biz verilənlər bazası obyektlərinin bir neçə növünə baxdıq - saxlanılan prosedurlar, görünüşlər və triggerlər. Aşağıdakıları öyrəndik:

  • Görünüş adətən bir və ya bir neçə cədvəlin sütunlarının alt çoxluğu kimi yaradılan virtual cədvəldir. Görünüşü yaratmaq üçün CREATE VIEW bəndindən, dəyişdirmək üçün ALTER VIEW bəndindən, silmək üçün isə DROP VIEW bəndindən istifadə olunur.
  • Saxlanılan prosedur verilənlər bazasında adlandırılmış obyekt kimi saxlanılan və tək kod parçası kimi icra edilən SQL ifadələrinin tərtib edilmiş toplusudur. CREATE PROCEDURE saxlanan proseduru yaratmaq üçün, ALTER PROCEDURE onu dəyişdirmək üçün, DROP PROCEDURE isə onu silmək üçün istifadə olunur.
  • Tətik, INSERT, DELETE və ya UPDATE SQL ifadəsindən istifadə etməklə xüsusi cədvəldəki məlumatlar əlavə edildikdə, silindikdə və ya dəyişdirildikdə avtomatik olaraq işə salınan saxlanılan prosedurun xüsusi növüdür. Tətiklər CREATE TRIGGER bəndindən istifadə etməklə yaradılır. ALTER TRIGGER bəndi tətiyi dəyişdirmək üçün, DROP TRIGGER bəndi isə onu silmək üçün istifadə olunur.

ComputerPress 12"2000

İşin məqsədi– verilənlər bazası serverində saxlanılan prosedurları necə yaratmağı və istifadə etməyi öyrənin.

1. Bütün nümunələr üzərində işləmək, onların SQL Server Management Studio utilitində icrasının nəticələrini təhlil etmək. Yaradılmış prosedurların cari verilənlər bazasında olub-olmadığını yoxlamaq.

2. Laboratoriya işlərinin gedişində bütün nümunələrin və tapşırıqların yerinə yetirilməsi.

3. Variantlara görə fərdi tapşırıqların yerinə yetirilməsi.

İş izahatları

Saxlanılan prosedurların proqramlaşdırılmasını mənimsəmək üçün adlanan verilənlər bazası nümunəsindən istifadə edirik DB_Kitablar, 1 saylı laboratoriya işində yaradılmışdır. Nümunələr və tapşırıqları yerinə yetirərkən verilənlər bazasının, cədvəllərin və layihənin digər obyektlərinin adları arasındakı uyğunluğa diqqət yetirin.

Saxlanılan prosedurlar bir və ya bir neçə SQL ifadəsi və ya funksiyasından ibarət olan və tərtib edilmiş formada verilənlər bazasında saxlanılan əmrlər toplusudur.

Saxlanılan prosedurların növləri

Sistemdə saxlanılan prosedurlar müxtəlif inzibati hərəkətləri yerinə yetirmək üçün nəzərdə tutulmuşdur. Demək olar ki, bütün server idarəetmə hərəkətləri onların köməyi ilə həyata keçirilir. Deyə bilərik ki, sistemdə saxlanılan prosedurlar sistem cədvəlləri ilə işi təmin edən interfeysdir. Sistemdə saxlanılan prosedurlara sp_ prefiksi qoyulur, sistem verilənlər bazasında saxlanılır və istənilən digər verilənlər bazası kontekstində çağırıla bilər.

Xüsusi saxlanılan prosedurlar müəyyən hərəkətləri həyata keçirir. Saxlanılan prosedurlar tam verilənlər bazası obyektidir. Nəticədə, hər bir saxlanılan prosedur yerinə yetirildiyi xüsusi verilənlər bazasında yerləşir.

Müvəqqəti saxlanılan prosedurlar yalnız qısa müddətə mövcuddur, bundan sonra server tərəfindən avtomatik olaraq məhv edilir. Onlar yerli və qlobal bölünür. Yerli müvəqqəti saxlanan prosedurlar yalnız yaradıldıqları əlaqədən çağırıla bilər. Belə bir prosedur yaratarkən ona tək # simvolu ilə başlayan ad verilməlidir. Bütün müvəqqəti obyektlər kimi, istifadəçi serveri ayırdıqda, yenidən işə saldıqda və ya dayandırdıqda bu tip saxlanılan prosedurlar avtomatik olaraq silinir. Qlobal müvəqqəti saxlanılan prosedurlar eyni prosedura malik olan serverdə istənilən əlaqə üçün mövcuddur. Onu müəyyən etmək üçün ona ## simvolu ilə başlayan ad vermək kifayətdir. Bu prosedurlar server yenidən işə salındıqda və ya dayandırıldıqda və ya kontekstində yaradıldıqları əlaqə bağlandıqda silinir.

Saxlanılan prosedurların yaradılması, dəyişdirilməsi

Saxlanılan prosedurun yaradılması aşağıdakı vəzifələrin həllini nəzərdə tutur: giriş hüquqlarının planlaşdırılması. Saxlanılan proseduru yaradarkən nəzərə alın ki, o, verilənlər bazası obyektlərinə onu yaradan istifadəçi ilə eyni giriş hüquqlarına malik olacaq; saxlanılan prosedurun parametrlərinin müəyyən edilməsi, saxlanılan prosedurların giriş və çıxış parametrləri ola bilər; saxlanılan prosedur kodunun inkişafı. Prosedur kodunda digər saxlanılan prosedurlara çağırışlar da daxil olmaqla istənilən SQL əmrləri ardıcıllığı ola bilər.

MS SQL Server notasiyasında yenisini yaratmaq və ya mövcud saxlanılan proseduru dəyişdirmək üçün sintaksis belədir:

( YARAT | DƏYİŞTİR ) PROC[ EDURE] prosedur_adı [ ;nömrə] [ ( @parameter_name datatype ) [ VARYING ] [ = DEFAULT ] [ OUTPUT] ] [ ,... n] [ WITH ( YENİDƏN TƏRKİB | ŞİFRƏLƏMƏ | YENİDƏN TƏRƏM ET, ŞİFRELƏMƏ )] [ REPLİKASYON ÜÇÜN] sql_statement KİMİ [ ... n]

Bu əmrin parametrlərini nəzərdən keçirin.

sp_, #, ## prefikslərindən istifadə etməklə yaradılmış prosedur sistem və ya müvəqqəti prosedur kimi müəyyən edilə bilər. Komandanın sintaksisindən də göründüyü kimi, yaradılan prosedurun aid olacağı sahibin adının, habelə onun yerləşdirilməli olduğu verilənlər bazasının adının göstərilməsinə icazə verilmir. Buna görə də yaratdığınız saxlanılan proseduru konkret verilənlər bazasında yerləşdirmək üçün həmin verilənlər bazası kontekstində CREATE PROCEDURE əmrini yerinə yetirməlisiniz. Saxlanılan prosedurun gövdəsindən eyni verilənlər bazasından obyektlərə daxil olarkən siz qısaldılmış adlardan, yəni verilənlər bazasının adını göstərmədən istifadə edə bilərsiniz. Başqa verilənlər bazalarında yerləşən obyektlərə istinad etmək istədiyiniz zaman verilənlər bazası adının göstərilməsi məcburidir.

Yaradılmış saxlanan prosedurda giriş və çıxış məlumatlarını ötürmək üçün parametr adları @ simvolu ilə başlamalıdır. Siz bir saxlanılan prosedurda vergüllə ayrılmış çoxlu parametrləri təyin edə bilərsiniz. Prosedurun gövdəsi adları prosedurun parametrlərinin adları ilə eyni olan yerli dəyişənlərdən istifadə etməməlidir. İstənilən SQL məlumat növü, o cümlədən istifadəçi tərəfindən təyin olunanlar, saxlanılan prosedur parametrlərinin məlumat növünü təyin etmək üçün uyğundur. Bununla belə, CURSOR məlumat növü yalnız saxlanılan prosedurun çıxış parametri kimi istifadə edilə bilər, yəni. OUTPUT açar sözü ilə.

OUTPUT açar sözünün olması o deməkdir ki, müvafiq parametr saxlanılan prosedurdan verilənləri qaytarmaq üçün nəzərdə tutulub. Ancaq bu, parametrin dəyərləri saxlanılan prosedura ötürmək üçün uyğun olmadığını ifadə etmir. OUTPUT açar sözünün təyin edilməsi saxlanılan prosedurdan çıxdıqda serverə parametrin cari dəyərini prosedur çağırılan zaman parametr dəyəri kimi təyin edilmiş yerli dəyişənə təyin etməyi tapşırır. Nəzərə alın ki, OUTPUT açar sözünü təyin edərkən proseduru çağırarkən müvafiq parametrin dəyəri yalnız lokal dəyişəndən istifadə etməklə təyin edilə bilər. Normal parametrlər üçün icazə verilən hər hansı ifadə və ya sabitlərə icazə verilmir. VARYING açar sözü CURSOR tipli OUTPUT parametri ilə birlikdə istifadə olunur. Çıxış parametrinin nəticə dəsti olacağını müəyyən edir.

DEFAULT açar sözü müvafiq parametrin standart olaraq qəbul edəcəyi dəyərdir. Beləliklə, proseduru çağırarkən, müvafiq parametrin dəyərini açıq şəkildə göstərə bilməzsiniz.

Server sorğunun icra planını və tərtib edilmiş kodu önbelleğe aldığından, növbəti dəfə prosedur çağırıldıqda artıq hazırlanmış dəyərlərdən istifadə olunacaq. Bununla belə, bəzi hallarda hələ də prosedur kodunu yenidən tərtib etmək lazımdır. RECOMPILE açar sözünün göstərilməsi sistemə hər dəfə saxlanılan prosedur üçün icra planı yaratmağı tapşırır.

REPLİKASYON ÜÇÜN seçimi verilənlərin təkrarlanması və yaradılan saxlanılan prosedurun nəşrə məqalə kimi daxil edilməsi zamanı tələb olunur. ENCRYPTION açar sözü serverə saxlanılan prosedur kodunu şifrələməyi tapşırır ki, bu da saxlanılan proseduru həyata keçirən xüsusi alqoritmlərin istifadəsindən müdafiəni təmin edə bilər. AS açar sözü saxlanılan prosedur gövdəsinin özünün əvvəlində yerləşdirilir. Demək olar ki, bütün SQL əmrləri prosedur orqanında istifadə edilə bilər, əməliyyatlar elan edilə bilər, kilidlər təyin edilə bilər və digər saxlanılan prosedurlar çağırıla bilər. RETURN əmri ilə saxlanılan prosedurdan çıxa bilərsiniz.

Saxlanılan prosedurun silinməsi

DROP PROSEDURE (prosedur_adı) [ ,... n]

Saxlanılan Prosedurun İcrası

Saxlanılan proseduru yerinə yetirmək üçün aşağıdakı əmrdən istifadə olunur: [ [ EXEC [ UTE] prosedur_adı [ ;nömrə] [ [ @parametr_adı= ] ( dəyər | @dəyişən_adı) [ ÇIXIŞ ] | [ DEFAULT ] ] [ ,...n]

Saxlanılan prosedur çağırışı topluda yeganə əmr deyilsə, EXECUTE əmrinin olması məcburidir. Bundan əlavə, bu əmr başqa bir prosedurun və ya triggerin gövdəsindən proseduru çağırmaq üçün tələb olunur.

Prosedur çağırışında OUTPUT açar sözünün istifadəsinə yalnız prosedur OUTPUT açar sözü ilə yaradılan zaman elan edilmiş parametrlər üçün icazə verilir.

Parametr üçün DEFAULT açar sözü ilə prosedur çağırıldıqda, standart dəyər istifadə olunacaq. Təbii ki, göstərilən DEFAULT sözünə yalnız standart dəyərin təyin olunduğu parametrlər üçün icazə verilir.

EXECUTE əmrinin sintaksisindən proseduru çağırarkən parametr adlarının buraxıla biləcəyini görə bilərsiniz. Bununla belə, bu halda istifadəçi parametrlər üçün dəyərləri prosedur yaradılarkən siyahıya alındığı ardıcıllıqla göstərməlidir. Siz sadəcə olaraq siyahıda onu buraxmaqla parametrə standart dəyər təyin edə bilməzsiniz. Defolt dəyəri olan parametrləri buraxmaq istəyirsinizsə, saxlanılan proseduru çağırarkən parametr adlarını açıq şəkildə göstərmək kifayətdir. Üstəlik, bu şəkildə parametrləri və onların dəyərlərini istənilən qaydada sadalaya bilərsiniz.

Qeyd edək ki, prosedur çağırılan zaman ya dəyərləri olan parametr adları, ya da yalnız parametr adı olmayan dəyərlər göstərilir. Onların birləşməsinə icazə verilmir.

Saxlanılan Prosedurda RETURN-dən istifadə

Göstərilən şərtə uyğun olaraq istənilən nöqtədə prosedurdan çıxmağa imkan verir, həmçinin prosedurun icrasının nəticəsini rəqəm kimi köçürməyə imkan verir ki, bu da prosedurun keyfiyyətini və düzgünlüyünü mühakimə edə bilərsiniz. Parametrləri olmayan bir prosedur yaratmaq nümunəsi:

Books GO-DAN SEÇİM SAYI OLARAQ Count_Books (Kod_kitabı) PROSEDURU YARATIN

Məşq 1.

EXEC Count_Books

Nəticəni yoxlayın.

Giriş parametri ilə prosedur yaratmaq nümunəsi:

Count_Books_Pages @Count_pages PROSEDURU YARADIN Səhifələr>= @Sayfa_sayfalar GEDİLƏN KİTABLARDAN SEÇİM SAYI (Kod_kitabı) KİMİ

Tapşırıq 2. Bu proseduru SQL server Management Studio yardım proqramından istifadə edərək DB_Books verilənlər bazasının Saxlanan Prosedurlar bölməsində yaradın. Komanda ilə işləyin

EXEC Count_Books_Pages 100

Nəticəni yoxlayın.

Giriş parametrləri ilə bir prosedur yaratmaq nümunəsi:

PROSEDUR YARATIN Count_Books_Title @Count_pages AS INT , @Title AS CHAR (10 ) SY CHAR (Kod_book) FROM WHERE Pages>= @Count_pages VƏ Title_book KİMİ @Title GO

Tapşırıq 3. Bu proseduru SQL server Management Studio yardım proqramından istifadə edərək DB_Books verilənlər bazasının Saxlanan Prosedurlar bölməsində yaradın. Komanda ilə işləyin

EXEC Count_Books_Title 100 , "P%"

Nəticəni yoxlayın.

Giriş parametrləri və çıxış parametri ilə prosedur yaratmağa nümunə:

PROSEDUR YARATIN Count_Books_Itogo @Count_pages INT , @Title CHAR (10 ) , @Itogo GİRİŞ ÇIXIŞI SEÇİLƏK @Itogo = COUNT (Kod_kitabı) KİTABLARDAN HARADA Səhifələr>= @Sayfa_səhifələr VƏ Başlıq_kitabı KİMİ @Title GO

Tapşırıq 4. Bu proseduru SQL server Management Studio yardım proqramından istifadə edərək DB_Books verilənlər bazasının Saxlanan Prosedurlar bölməsində yaradın. Bir sıra əmrlərlə işləyin:

Sql> @q elan et int EXEC Count_Books_Itogo 100, "P%", @q çıxışı @q seçin

Nəticəni yoxlayın.

Giriş parametrləri və RETURN ilə prosedurun yaradılması nümunəsi:

CREATE PROCEDURE checkname @param INT KİMİ (Ad_author FROM müəlliflərdən SEÇİN Code_author = @param) = "Puşkin A.S." GERİ DÖNÜŞ 1 BAŞQA 2

Tapşırıq 5. Bu proseduru SQL server Management Studio yardım proqramından istifadə edərək DB_Books verilənlər bazasının Saxlanan Prosedurlar bölməsində yaradın. Bunu əmrlərlə işə salın:

BƏYAN EDİN @return_status INT EXEC @return_status = yoxlama adı 1 SEÇİN "Qayıdış statusu" = @return_status

Satınalmalar cədvəlində əsas sahənin dəyərini ikiqat artırmaq üçün parametrləri olmayan prosedurun yaradılması nümunəsi:

YENİLƏNMƏ KİMİ PROC update_proc YARATIN Satınalmalar SET Code_purchase = Code_purchase* 2

Tapşırıq 6. Bu proseduru SQL server Management Studio yardım proqramından istifadə edərək DB_Books verilənlər bazasının Saxlanan Prosedurlar bölməsində yaradın. Komanda ilə işləyin

EXEC update_proc

Müəyyən bir müəllif haqqında bütün məlumatları əldə etmək üçün giriş parametri olan prosedura nümunə:

PROC CREATE select_author @k CHAR (30 ) SEÇİLMƏK KİMİ * Müəlliflərdən HARADA name_author= @k

Tapşırıq 7.

EXEC select_author "Puşkin A.S." və ya select_author @k= "Puşkin A.S." və ya EXEC select_author @k= "Puşkin A.S."

Satınalmalar cədvəlindəki açar sahəsinin dəyərini müəyyən edilmiş sayda (standart olaraq 2 dəfə) artırmaq üçün giriş parametri və standart dəyəri olan prosedurun yaradılması nümunəsi:

PROC YARATIN update_proc @p INT = 2 YENİLƏNMİŞ KİMİ Satınalmalar SET Kod_alış = Kod_alış * @p

Prosedur heç bir məlumatı qaytarmır.

Tapşırıq 8. Bu proseduru SQL server Management Studio yardım proqramından istifadə edərək DB_Books verilənlər bazasının Saxlanan Prosedurlar bölməsində yaradın. Bunu əmrlərlə işə salın:

EXEC update_proc 4 və ya EXEC update_proc @p = 4 və ya EXEC update_proc --defolt dəyər istifadə olunacaq.

Giriş və çıxış parametrləri ilə prosedurun yaradılması nümunəsi. Müəyyən bir müddət ərzində yerinə yetirilən sifarişlərin sayını müəyyən etmək üçün prosedur yaradın:

@d1 VƏ @d2 ARASINDA TARİX_Sifariş OLDUĞUNDA @c = ISNULL (@c, 0 ) OLDUĞU SATIŞLARDAN PROC count_applises @d1 SMALLDATETIME, @d2 SMALLDATETIME, @c SEÇİM @c= COUNT (Kod_satın alma) KİMİ İNT ÇIXIŞI YARATIN

Tapşırıq 9. Bu proseduru SQL server Management Studio yardım proqramından istifadə edərək DB_Books verilənlər bazasının Saxlanan Prosedurlar bölməsində yaradın. Bunu əmrlərlə işə salın:

DECLARE @c2 INT EXEC count_purchases '01- iyun- 2006 ', '01- iyul- 2006 ', @c2 OUTPUT SELECT @c2

üçün tapşırıq variantları laboratoriya işi №4

Ümumi müddəalar. SQL Server Management Studio-da yaradın yeni səhifə kod üçün ("Sorğu yarat" düyməsi). Yaradılmış DB_Books verilənlər bazasını proqramlı şəkildə Use ifadəsindən istifadə edərək aktiv edin. İfadələrdən istifadə edərək saxlanılan prosedurlar yaradın Prosedur yaradın, və prosedurların adlarını müstəqil olaraq müəyyənləşdirin. Hər bir prosedur ikinci laboratoriyada yerinə yetirilən bir SQL sorğusunu yerinə yetirəcək. Üstəlik, sorğuların SQL kodu axtarılan sahələrin dəyərlərini ötürə biləcək şəkildə dəyişdirilməlidir.

Məsələn, №2 laboratoriyadakı orijinal tapşırıq və sorğu:

/*Təchizatçı kataloqundan (Çatdırılma cədvəli) şirkətlərin adlarını, telefon nömrələrini və şirkət adı (Sahənin_şirkəti) OAO MIR olan VÖEN-ni (Sahələrin Adı_şirkət, Telefon və İNN) seçin.

Adı_şirkət, Telefon, İNN SEÇİN HARADA Çatdırılmalar Adı_şirkət = "JSC MIR"

*/ – Bu işdə prosedur yaradılacaq:

PROC CREATE select_name_company @comp CHAR (30 ) KİMİ SEÇİM Adı_şirkət, Telefon, INN FROM Çatdırılmalar HARADA Adı_şirkət = @comp

– Proseduru başlamaq üçün əmrdən istifadə edin:

EXEC select_name_company "JSC MIR"

Tapşırıq siyahısı

SQL Server Management Studio-da yeni proqram yaradın. Lab №1-də yaradılmış fərdi verilənlər bazasını proqramlı şəkildə Use ifadəsindən istifadə edərək aktiv edin. Create proseduru ifadələrindən istifadə edərək saxlanılan prosedurları yaradın və prosedurların adlarını özünüz təyin edin. Hər bir prosedur bir SQL sorğusunu yerinə yetirəcək, bu sorğular seçimlər üzrə ayrıca tapşırıqlar kimi təqdim olunur.

Seçim 1

1. Ən azı bir uşağı olan işçilərin siyahısını göstərin.

2. Müəyyən edilmiş müddətdə hədiyyə almış uşaqların siyahısını göstərin.

3. Azyaşlı uşaqları olan valideynlərin siyahısını göstərin.

4. Göstərilən nömrədən daha çox dəyərə malik hədiyyələr haqqında məlumatı tarixə görə sıralayın.

Seçim 2

1. Göstərilən tipli qurğuların siyahısını göstərin.

2. Təmir edilmiş cihazların sayını və göstərilən ustadan təmirin ümumi dəyərini göstərin.

3. Cihaz sahiblərinin siyahısını və onların hitlərinin sayını azalan sıra ilə hitlərin sayına görə sıralayın.

4. Rütbəsi göstərilən nömrədən çox olan və ya işə qəbul tarixi göstərilən tarixdən az olan magistrlər haqqında məlumatı göstərin.

Seçim 3

2. Göstərilən nömrədən artıq məbləğə güllərin satıldığı satış kodlarının siyahısını göstərin.

3. Göstərilən satış kodu üçün satış tarixini, məbləğini, satıcısını və çiçəyini göstərin.

4. Rənglərin siyahısını göstərin və hündürlüyü göstərilən saydan çox olan və ya çiçək açan çiçəklər üçün çeşidləyin.

Seçim 4

1. İstifadəyə dair göstərişi olan dərmanların siyahısını göstərin.

2. Eyni adlı dərmanın müəyyən edilmiş sayından artıq satıldığı çatdırılma tarixlərinin siyahısını göstərin.

3. Çatdırılma tarixini, məbləğini, təchizatçıdan menecerin tam adını və dərmanın adını göstərilən nömrədən çox qəbz kodu ilə göstərin.

Seçim 5

2. Göstərilən səbəbdən istismardan çıxarılan avadanlıqların siyahısını göstərin.

3. Göstərilən müddət ərzində istismardan çıxarılan avadanlıqların qəbul tarixi, avadanlığın adı, məsul şəxsin tam adı və istismardan çıxarılma tarixi göstərilir.

4. Göstərilən tipli və ya qəbul tarixi müəyyən dəyərdən çox olan avadanlıqların siyahısını göstərin

Variant 6

1. Çəkisi müəyyən edilmiş saydan çox olan yeməklərin siyahısını göstərin.

2. Adlarında göstərilən söz fraqmenti olan məhsulların siyahısını göstərin.

3. Məhsulun həcmini, yeməyin adını, məhsulun adını göstəriləndən qab kodu ilə göstərin ilkin dəyər müəyyən bir son dəyərə.

4. Karbohidratların miqdarı müəyyən bir dəyərdən çox olan yeməyin bişirilmə qaydasını və yeməyin adını və ya müəyyən edilmiş dəyərdən çox kalori miqdarını göstərin.

Seçim 7

1. Göstərilən vəzifə ilə işçilərin siyahısını göstərin.

3. Göstərilən müddət ərzində qeydə alınmış sənədlər üçün qeydiyyat tarixini, sənədin növünü, registratorun tam adını və təşkilatın adını göstərin.

4. Müəyyən bir sənəd növü və ya qeyd olunan dəyərdən çox qeydiyyat tarixi ilə qeydə alınmış sənədlərin siyahısını göstərin.

Seçim 8

1. İşdən çıxmaq üçün göstərilən səbəblə işçilərin siyahısını göstərin.

3. Göstərilən müddət ərzində qeydə alınmış sənədlər üçün qeydiyyat tarixini, işdən çıxarılma səbəbini, işçinin tam adını göstərin.

Seçim 9

1. Göstərilən növdə məzuniyyətə çıxan işçilərin siyahısını göstərin.

2. Göstərilən müddət ərzində qeydiyyat tarixi olan sənədlərin siyahısını göstərin.

3. Göstərilən müddət ərzində qeydiyyatdan keçmiş sənədlər üçün qeydiyyat tarixini, məzuniyyət növünü, işçinin tam adını göstərin.

4. Göstərilən diapazonda sənəd kodu olan qeydə alınmış sənədlərin siyahısını göstərin.

Seçim 10

1. Göstərilən vəzifə ilə işçilərin siyahısını göstərin.

2. Göstərilən söz fraqmentini ehtiva edən sənədlərin siyahısını göstərin.

3. Göstərilən müddət ərzində qeydə alınmış sənədlər üçün qeydiyyat tarixi, sənədin növü, göndərənin tam adı və təşkilatın adı göstərilir.

4. Göstərilən sənəd növü və ya sənəd kodu müəyyən dəyərdən az olan qeydə alınmış sənədlərin siyahısını göstərin.

Seçim 11

1. Göstərilən vəzifəyə təyin edilmiş işçilərin siyahısını göstərin.

2. Göstərilən müddət ərzində qeydiyyat tarixi olan sənədlərin siyahısını göstərin.

3. Göstərilən müddət ərzində qeydiyyatdan keçmiş sənədlər üçün qeydiyyat tarixini, vəzifəsini, işçinin tam adını göstərin.

4. Göstərilən diapazonda sənəd kodu olan qeydə alınmış sənədlərin siyahısını göstərin.

Seçim 12

3. Avadanlıq icarəyə götürmüş şəxslərin siyahısını və onların sorğularının sayını azalan qaydada sorğuların sayına görə sırala.

Seçim 13

1. Göstərilən tipli avadanlıqların siyahısını göstərin. 2. Müəyyən bir işçinin istismardan çıxardığı avadanlıqların siyahısını göstərin.

3. Avadanlıq növünə görə qruplaşdırılmış istismardan çıxarılan avadanlığın miqdarını göstərin.

4. İşə qəbul tarixi müəyyən bir tarixdən daha çox olan işçilər haqqında məlumatı göstərin.

Seçim 14

1. Göstərilən yarpaq növü ilə çiçəklərin siyahısını göstərin.

2. Çiçəklərin müəyyən dəyərdən yuxarı məbləğlərə satıldığı qəbz kodlarının siyahısını göstərin.

3. Qəbul tarixini, məbləği, təchizatçının adlarını və konkret təchizatçı kodu üçün rəngləri göstərin.

4. Çiçəklərin siyahısını və hündürlüyü müəyyən saydan çox olan və ya çiçək açan çiçəklər üçün növünü göstərin.

Seçim 15

1. Göstərilən müddətdə otaqlara gələn müştərilərin siyahısını göstərin.

2. Hər bir müştəri üçün otaqlar üçün ödənişlərin ümumi məbləğini göstərin.

3. Göstərilən müddət ərzində qeydiyyatdan keçmiş müştərilərin gəliş tarixini, otaq tipini, tam adını göstərin.

4. Müəyyən tipli otaqlarda qeydiyyatdan keçmiş müştərilərin siyahısını göstərin.

Variant 16

1. Göstərilən tipli avadanlıqların siyahısını göstərin.

2. Müəyyən bir müştərinin icarəyə götürdüyü avadanlıqların siyahısını göstərin.

3. Avadanlıq icarəyə götürmüş şəxslərin siyahısını və onların sorğularının sayını azalan qaydada sorğuların sayına görə sırala.

4. Müştərilər haqqında məlumatı ünvanlar üzrə çeşidlənmiş göstərin.

Variant 17

1. Alış qiyməti müəyyən dəyərdən və ya zəmanət müddəti göstərilən nömrədən çox olan qiymətlilərin siyahısını göstərin.

2. Göstərilən sözün adında baş verdiyi maddi sərvətlərin yerlərinin siyahısını göstərin.

3. Qiymətli əşyaların dəyərinin cəmini müəyyən edilmiş diapazonda kodla göstərin.

4. Göstərilən diapazonda iş tarixi ilə maddi məsul şəxslərin siyahısını göstərin.

Variant 18

1. Müəyyən bir usta tərəfindən yerinə yetirilən təmirlərin siyahısını göstərin.

2. İşə daxil edilmiş, başlığında göstərilən sözün baş verdiyi iş mərhələlərinin siyahısını göstərin.

3. Göstərilən diapazonda kodlu işlər üçün təmir işlərinin mərhələlərinin dəyərinin cəmini göstərin.

4. Göstərilən diapazonda iş tarixi ilə ustaların siyahısını göstərin.

Variant 19

1. Xüsusi göstərişi olan dərmanların siyahısını göstərin.

2. Müəyyən sayda dərman satan qəbz nömrələrinin siyahısını göstərin.

3. Göstərilən nömrə ilə qəbz üçün satış tarixini, məbləğini, kassirin tam adını və dərmanı göstərin.

4. Dərman vasitələrinin siyahısını və qablaşdırma miqdarı göstərilən nömrədən çox olan dərman vasitələri üçün ölçü vahidlərini və ya dərman kodunu müəyyən dəyərdən az göstərin.

Seçim 20

1. Göstərilən vəzifə ilə işçilərin siyahısını göstərin.

2. Göstərilən söz fraqmentini ehtiva edən sənədlərin siyahısını göstərin.

3. Göstərilən müddətdə qeydə alınmış sənədlər üçün qeydiyyat tarixi, sənədin növü, icraçının tam adı və icra faktı göstərilir.

4. Göstərilən sənəd növü ilə və ya müəyyən diapazonda sənəd kodu ilə qeydə alınmış sənədlərin siyahısını göstərin.

Saxlanılan prosedur SQL dili və prosedur uzantılarından istifadə etməklə yaradılmış Transact-SQL bəyanat toplusunun xüsusi növüdür. Paketin saxlanılan prosedurdan əsas fərqi ondan ibarətdir ki, sonuncu verilənlər bazası obyekti kimi saxlanılır. Başqa sözlə, təkrarlanan tapşırıqların performansını və ardıcıllığını yaxşılaşdırmaq üçün saxlanılan prosedurlar server tərəfində saxlanılır.

Database Engine saxlanılan prosedurları və sistem prosedurlarını dəstəkləyir. Saxlanılan prosedurlar bütün digər verilənlər bazası obyektləri ilə eyni şəkildə yaradılır, yəni. DDL dilindən istifadə etməklə. Sistem Prosedurları Verilənlər Bazası Mühərriki tərəfindən təmin edilir və sistem kataloqunda məlumat əldə etmək və dəyişdirmək üçün istifadə edilə bilər.

Saxlanılan prosedur yaratarkən, parametrlərin əlavə siyahısını müəyyən edə bilərsiniz. Beləliklə, prosedur hər dəfə çağırılanda müvafiq arqumentləri qəbul edəcəkdir. Saxlanılan prosedurlar istifadəçi tərəfindən müəyyən edilmiş məlumatı ehtiva edən dəyəri və ya xəta baş verdikdə müvafiq xəta mesajını qaytara bilər.

Saxlanılan prosedur verilənlər bazasında obyekt kimi saxlanmazdan əvvəl əvvəlcədən tərtib edilir. Prosedurun əvvəlcədən tərtib edilmiş forması verilənlər bazasında saxlanılır və hər dəfə çağırılanda istifadə olunur. Saxlanılan prosedurların bu xüsusiyyəti (demək olar ki, bütün hallarda) prosedurların təkrar kompilyasiyasını aradan qaldırmağın və müvafiq performans yaxşılaşdırılmasının əldə edilməsinin vacib faydasını təmin edir. Saxlanılan prosedurların bu xassəsi verilənlər bazası sistemi ilə proqramlar arasında mübadilə edilən məlumatların həcminə də müsbət təsir göstərir. Xüsusilə, bir neçə min baytlıq saxlanılan prosedura zəng 50 baytdan az tələb edə bilər. Bir neçə istifadəçi saxlanılan prosedurlardan istifadə edərək təkrarlanan tapşırıqları yerinə yetirdikdə, bu qənaətlərin məcmu təsiri əhəmiyyətli ola bilər.

Saxlanan prosedurlar həmçinin aşağıdakı məqsədlər üçün istifadə edilə bilər:

    verilənlər bazası cədvəlləri ilə hərəkətlər haqqında qeydlər jurnalını yaratmaq.

Saxlanılan prosedurların istifadəsi istifadəçilərə müxtəlif giriş imtiyazları verən GRANT və REVOKE bəyanatlarının istifadəsi ilə verilən təhlükəsizlikdən xeyli kənara çıxan təhlükəsizlik nəzarəti səviyyəsini təmin edir. Bu, mümkün ola bilər, çünki saxlanılan proseduru icra etmək icazəsi, növbəti bölmədə təsvir olunduğu kimi, saxlanılan prosedurun tərkibində olan obyektləri dəyişdirmək səlahiyyətindən asılı deyildir.

Cədvəl yazma və/yaxud oxu əməliyyatlarının jurnallarını yaradan saxlanılan prosedurlar təmin edir əlavə imkan verilənlər bazası təhlükəsizliyi. Bu cür prosedurlardan istifadə edərək verilənlər bazası inzibatçısı istifadəçilər və ya proqramlar tərəfindən verilənlər bazasına edilən dəyişiklikləri izləyə bilər.

Saxlanılan Prosedurların Yaradılması və İcrası

Saxlanan prosedurlar ifadədən istifadə etməklə yaradılır PROSEDUR YARATIN, aşağıdakı sintaksisə malikdir:

PROC proc_name YARATIN [((@param1) type1 [ DƏYİŞƏN] [= default1] )] (, …) toplu olaraq | EXTERNAL NAME metod_adı Sintaksis konvensiyaları

schema_name parametri yaradılan saxlanılan prosedurun sahibi tərəfindən təyin edilən sxem adını müəyyən edir. proc_name parametri saxlanılan prosedurun adını təyin edir. @param1 parametri məlumat növü type1 parametri ilə müəyyən edilən prosedur parametridir (formal arqument). Lokal dəyişənlər paket daxilində lokal olduğu kimi prosedur parametrləri prosedur daxilində lokaldır. Prosedur parametrləri zəng edən tərəfindən istifadə üçün prosedura ötürülən dəyərlərdir. default1 parametri müvafiq prosedur parametri üçün standart dəyəri təyin edir. (Defolt dəyər də NULL ola bilər.)

ÇIXIŞ seçimi prosedur parametrinin qaytarıla biləcəyini və saxlanılan prosedurdan çağıran prosedura və ya sistemə dəyəri qaytarmaq üçün istifadə edilə biləcəyini müəyyən edir.

Daha əvvəl qeyd edildiyi kimi, prosedurun əvvəlcədən tərtib edilmiş forması verilənlər bazasında saxlanılır və hər dəfə çağırılanda istifadə olunur. Əgər nədənsə saxlanılan proseduru hər dəfə çağırılanda tərtib etmək lazımdırsa, prosedurun elanında istifadə olunur. RECOMPILE İLƏ seçim. YENİDƏN TƏRKİB İLƏ seçimindən istifadə saxlanılan prosedurların ən mühüm üstünlüklərindən birini rədd edir: tək kompilyasiya sayəsində performans yaxşılaşması. Buna görə də, WITH RECOMPILE seçimi yalnız saxlanılan prosedur tərəfindən istifadə olunan verilənlər bazası obyektlərində tez-tez dəyişikliklər olduqda istifadə edilməlidir.

TƏKLİF KİMİ İCRA EDİN saxlanılan prosedur çağırıldıqdan sonra icra edilməli olduğu təhlükəsizlik kontekstini müəyyən edir. Bu konteksti təyin etməklə Database Engine bu saxlanılan prosedurun istinad etdiyi obyektlərə giriş icazələrini yoxlamaq üçün istifadəçi hesablarının seçiminə nəzarət edə bilər.

Varsayılan olaraq, yalnız sysadmin sabit server rolunun üzvləri və db_owner və ya db_ddladmin sabit verilənlər bazası rolu CREATE PROCEDURE bəyanatından istifadə edə bilər. Bununla belə, bu rolların üzvləri təlimatdan istifadə edərək bu hüququ digər istifadəçilərə təyin edə bilərlər QRANT YARATMA PROSEDURU.

Aşağıdakı nümunə Layihə cədvəli ilə işləmək üçün sadə saxlanılan prosedurun necə yaradılacağını göstərir:

Nümunə Db-dən istifadə edin; GEDİN PROSEDUR YARATIN ArtırınBüdcə (@faiz INT=5) YENİLƏNİB Layihə Dəsti Büdcə = Büdcə + Büdcə * @faiz/100;

Daha əvvəl qeyd edildiyi kimi, iki paketi ayırmaq üçün istifadə olunur GO təlimatı. CREATE PROCEDURE ifadəsi eyni topludakı digər Transact-SQL ifadələri ilə birləşdirilə bilməz. IncreaseBudget saxlanan proseduru bütün layihələr üçün büdcələri @faiz parametri ilə müəyyən edilmiş müəyyən faiz artırır. Prosedur həmçinin prosedurun icrası zamanı bu arqument mövcud olmadıqda tətbiq edilən standart faiz dəyərini (5) müəyyən edir.

Saxlanılan prosedurlar mövcud olmayan cədvəllərə daxil ola bilər. Bu xüsusiyyət əvvəlcə müvafiq cədvəllər yaratmadan və hətta təyinat serverinə qoşulmadan prosedur kodunu sazlamağa imkan verir.

Həmişə cari verilənlər bazasında saxlanılan əsas saxlanılan prosedurlardan fərqli olaraq, tempdb müvəqqəti sistem verilənlər bazasında həmişə yerləşdirilən müvəqqəti saxlanılan prosedurlar yaratmaq mümkündür. Müvəqqəti saxlanılan prosedurların yaradılmasının səbəblərindən biri verilənlər bazasına qoşulduqda müəyyən qrup ifadələrin təkrar icrasının qarşısını almaq ola bilər. Siz yerli və ya qlobal müvəqqəti prosedurlar yarada bilərsiniz. Bunun üçün lokal prosedurun adı tək # simvolu (#proc_name), qlobal prosedurun adı isə qoşa simvol (##proc_name) ilə müəyyən edilir.

Yerli müvəqqəti saxlanılan prosedur yalnız onu yaradan istifadəçi tərəfindən və yalnız onun yaradıldığı verilənlər bazasına qoşulma zamanı yerinə yetirilə bilər. Qlobal müvəqqəti prosedur bütün istifadəçilər tərəfindən yerinə yetirilə bilər, lakin yalnız onun işlədiyi son əlaqə (adətən prosedurun yaradıcısının əlaqəsi) dayandırılana qədər.

Saxlanılan prosedurun həyat dövrü iki mərhələdən ibarətdir: onun yaradılması və icrası. Hər bir prosedur bir dəfə yaradılır və dəfələrlə yerinə yetirilir. Saxlanılan prosedur tərəfindən yerinə yetirilir İfadələri icra edin prosedura sahib olan və ya prosedura daxil olmaq üçün EXECUTE hüququna malik olan istifadəçi. EXECUTE ifadəsi aşağıdakı sintaksisə malikdir:

[] [@return_status =] (proc_name | @proc_name_var) ([[@parameter1 =] dəyər | [@parameter1=] @dəyişən ] | DEFAULT).. Sintaksis Konvensiyaları

return_status parametri istisna olmaqla, EXECUTE ifadəsinin bütün parametrləri eyni adlı CREATE PROCEDURE ifadəsinin parametrləri ilə eyni məntiqi qiymətə malikdir. return_status parametri prosedurun qaytarılması statusunu saxlayan tam dəyişəni müəyyən edir. Dəyər ya sabit (dəyər) və ya yerli dəyişən (@dəyişən) istifadə edərək parametrə təyin edilə bilər. Adlandırılmış parametr dəyərlərinin sırası vacib deyil, lakin adsız parametr dəyərləri CREATE PROCEDURE bəyanatında müəyyən edildiyi ardıcıllıqla verilməlidir.

DEFAULT bəndi prosedur tərifində göstərilən prosedur parametri üçün standart dəyərləri təmin edir. Prosedura heç bir defolt dəyərinin müəyyən edilmədiyi və parametrin çatışmadığı və ya DEFAULT açar sözünün göstərildiyi parametr üçün dəyər gözlədikdə xəta baş verir.

EXECUTE ifadəsi topluda ilk ifadə olduqda, EXECUTE açar sözü buraxıla bilər. Ancaq bu sözü hər paketə daxil etmək daha təhlükəsizdir. EXECUTE ifadəsinin istifadəsi aşağıdakı nümunədə göstərilmişdir:

Nümunə Db-dən istifadə edin; IncreaseBudget 10-u İCRA EDİN;

Bu nümunədəki EXECUTE ifadəsi bütün layihələrin büdcəsini 10% artıran IncreaseBudget saxlanan prosedurunu yerinə yetirir.

Aşağıdakı nümunə İşçi və İş_on cədvəllərində verilənləri emal etmək üçün saxlanılan prosedurun necə yaradılacağını göstərir:

Nümunədə ModifyEmpId proseduru saxlanılan prosedurların istinad bütövlüyü prosesinin bir hissəsi kimi istifadəsini təsvir edir (bu halda İşçi və İş_on cədvəlləri arasında). Bu cür saxlanılan prosedur, faktiki olaraq istinad bütövlüyünü təmin edən tətik tərifi daxilində istifadə edilə bilər.

Aşağıdakı nümunə saxlanılan prosedurda OUTPUT bəndinin istifadəsini göstərir:

Bu saxlanılan prosedur aşağıdakı ifadələrdən istifadə etməklə yerinə yetirilə bilər:

DECLARE @quantityDeleteEmployee INT; İCRA EDİN DeleteEmployee @empId=18316, @ [email protected]ÇIXIŞ; PRINT N"İşçilər silindi: " + convert(nvarchar(30), @quantityDeleteEmployee);

Bu prosedur @empId personal nömrəsi olan işçinin üzərində işlədiyi layihələrin sayını hesablayır və nəticədə alınan dəyəri ©counter parametrinə təyin edir. İşçi və İş_on cədvəllərindən verilmiş kadr nömrəsi üçün bütün sətirlər silindikdən sonra hesablanmış dəyər @quantityDeleteEmployee dəyişəninə təyin edilir.

Parametr dəyəri çağırış proseduruna yalnız OUTPUT seçimi təyin edildikdə qaytarılır. Yuxarıdakı nümunədə DeleteEmployee proseduru @counter parametrini çağırış proseduruna ötürür, beləliklə, saxlanılan prosedur dəyəri sistemə qaytarır. Buna görə də @counter parametri həm prosedur elan edilərkən OUTPUT variantında, həm də onu çağırarkən EXECUTE operatorunda göstərilməlidir.

İLƏ NƏTİCƏLƏR SETS EXECUTE ifadəsinin bəndi

SQL Server 2012-də EXECUTE ifadəsi yazılır İLƏ NƏTİCƏLƏR SETS bəndi Müəyyən şərtlər altında saxlanılan prosedurun nəticə dəstinin formasını dəyişə bilən.

Aşağıdakı iki nümunə bu cümləni izah etməyə kömək edəcək. Birinci nümunə WITH RESULTS SETS bəndi buraxıldıqda nəticənin necə görünə biləcəyini göstərən giriş nümunəsidir:

EmployeesInDept proseduru müəyyən bir şöbədə çalışan bütün işçilərin şəxsi nömrələrini və soyadlarını göstərən sadə prosedurdur. Şöbə nömrəsi prosedur parametridir və proseduru çağırarkən qeyd edilməlidir. Bu prosedurun yerinə yetirilməsi, başlıqları verilənlər bazası cədvəlindəki müvafiq sütunların adlarına uyğun gələn iki sütunlu bir cədvəl verir, yəni. id və soyad. Nəticə sütununun başlıqlarını (həmçinin onların məlumat növlərini) dəyişdirmək üçün SQL Server 2012 yeni İLƏ NƏTİCƏLƏR DƏSTƏLƏRİ bəndindən istifadə edir. Bu bəndin tətbiqi aşağıdakı nümunədə göstərilmişdir:

Nümunə Db-dən istifadə edin; EXEC EmployeesInDept "d1" NƏTİCƏ DƏSTƏLƏRİ (( INT NOT NULL, [Soyad] CHAR(20) NOT NULL));

Bu şəkildə çağırılan saxlanılan prosedurun icrasının nəticəsi aşağıdakı kimi olacaq:

Göründüyü kimi, EXECUTE bəyanatında WITH RESULT SETS bəndindən istifadə edərək saxlanılan prosedurun icrası prosedurun yaratdığı nəticə dəsti sütunlarının adlarını və məlumat tipini dəyişməyə imkan verir. Beləliklə, bu yeni funksionallıq saxlanılan prosedurların icrasında və onların nəticələrinin yeni cədvəldə yerləşdirilməsində daha çox çeviklik təmin edir.

Saxlanılan Prosedurların strukturunun dəyişdirilməsi

Verilənlər Bazası Mühərriki də bəyanatı dəstəkləyir PROSEDURU DƏYİŞTİRİN saxlanılan prosedurların strukturunu dəyişdirmək. ALTER PROCEDURE ifadəsi adətən prosedur daxilində Transact-SQL ifadələrini dəyişdirmək üçün istifadə olunur. ALTER PROCEDURE ifadəsinin bütün parametrləri CREATE PROCEDURE ifadəsinin eyni adlı parametrləri ilə eyni məna daşıyır. Bu ifadədən istifadənin əsas məqsədi mövcud saxlanılan prosedur icazələrini ləğv etməməkdir.

Database Engine dəstəkləyir CURSOR məlumat növü. Bu məlumat növü saxlanılan prosedurlarda kursorları elan etmək üçün istifadə olunur. Kursor sorğunun nəticələrini (adətən sıralar toplusu) saxlamaq və istifadəçilərə həmin nəticəni sətir-sətir göstərməyə imkan vermək üçün istifadə edilən proqramlaşdırma konstruksiyasıdır.

Bir və ya bir qrup saxlanılan prosedurları silmək üçün istifadə edin DROP PROCEDURE bəyanatı. Yalnız saxlanılan prosedur sahibi və ya db_owner və sysadmin sabit rollarının üzvləri saxlanılan proseduru silə bilər.

Saxlanan prosedurlar və ümumi dil işləmə vaxtı

SQL Server C# və istifadə edərək müxtəlif verilənlər bazası obyektlərini (saxlanan prosedurlar, istifadəçi tərəfindən müəyyən edilmiş funksiyalar, tetikleyiciler, istifadəçi tərəfindən müəyyən edilmiş aqreqatlar və istifadəçi tərəfindən müəyyən edilmiş məlumat növləri) inkişaf etdirməyə imkan verən Ümumi Dil İcra Zamanını (CLR) dəstəkləyir. Visual Basic. Ümumi dil işləmə vaxtı bu obyektlərin ümumi iş vaxtı sistemindən istifadə edərək icra edilməsinə də imkan verir.

Ümumi dil işləmə müddəti seçim vasitəsilə aktiv və deaktiv edilir clr_enabled sistem proseduru sp_konfiqurasiya, göstərişi ilə icrası üçün işə salınır YENİDƏN KONfiqurasiya edin. Aşağıdakı nümunə sp_configure sistem prosedurundan istifadə edərək ümumi dil işləmə vaxtını necə aktivləşdirə biləcəyinizi göstərir:

Nümunə Db-dən istifadə edin; EXEC sp_configure "clr_enabled",1 YENİDAN KONFIGURE

CLR-dən istifadə edərək prosedur yaratmaq, tərtib etmək və saxlamaq üçün sadalanan ardıcıllıqla aşağıdakı addımlar ardıcıllığı tələb olunur:

    C# və ya Visual Basic-də saxlanılan prosedur yaradın və sonra müvafiq kompilyatordan istifadə edərək tərtib edin.

    Təlimatdan istifadə YAXŞILIQ YARATIN, müvafiq icraedici faylı yaradın.

    EXECUTE ifadəsindən istifadə edərək proseduru yerinə yetirin.

Aşağıdakı rəqəm göstərir qrafik sxeməvvəllər qeyd olunan addımlar. Aşağıdakılar daha çoxdur Ətraflı Təsviri bu proses.

Əvvəlcə, məsələn, bəzi inkişaf mühitində tələb olunan proqramı yaradın vizual studiya. C# və ya Visual Basic kompilyatorundan istifadə edərək hazır proqramı obyekt koduna tərtib edin. Bu kod, aralıq icra edilə bilən kodu yaradan CREATE ASSEMBLY bəyanatı üçün mənbə kimi xidmət edən dinamik keçid kitabxanasında (.dll) saxlanılır. Daha sonra icra olunan kodu verilənlər bazası obyekti kimi saxlamaq üçün CREATE PROCEDURE bəyanatını verin. Nəhayət, tanış EXECUTE ifadəsindən istifadə edərək proseduru yerinə yetirin.

Aşağıdakı nümunə C#-da saxlanılan prosedurun mənbə kodunu göstərir:

System.Data.SqlClient-dən istifadə; Microsoft.SqlServer.Server istifadə edərək; ictimai qismən sinif StoredProcedures ( ictimai statik int CountEmployees() ( int sətirlər; SqlConnection bağlantısı = yeni SqlConnection("Kontekst Bağlantısı=true"); connection.Open(); SqlCommand cmd = connection.CreateCommand(); cmd.CommandText = "seçmək count(*) kimi "İşçilərin sayı" " + "İşçidən"; sətirlər = (int)cmd.ExecuteScalar(); connection.Close(); sətirləri qaytarın; ) )

Bu prosedur İşçi cədvəlindəki sətirlərin sayını hesablamaq üçün sorğu həyata keçirir. Proqramın əvvəlində direktivlərdən istifadə edərək, onun icrası üçün tələb olunan ad boşluqlarını təyin edin. Bu direktivlərin istifadəsi sizə müvafiq ad boşluqlarını açıq şəkildə göstərmədən mənbə kodunda sinif adlarını təyin etməyə imkan verir. Sonra StoredProcedures sinfi müəyyən edilir, bunun üçün SqlProcedure atributu, kompilyatora bu sinfin saxlanılan prosedur olduğunu bildirir. Sinif kodunun daxilində CountEmployees() metodu müəyyən edilmişdir. Verilənlər bazası sistemi ilə əlaqə sinfin bir nümunəsi vasitəsilə qurulur SqlConnection. Əlaqəni açmaq üçün bu nümunənin Open() metodundan istifadə olunur. A CreateCommand() metodu bir sinfin nümunəsinə daxil olmağa imkan verir SqlCommnd, istədiyiniz SQL əmrinin ötürüldüyü.

Aşağıdakı kod parçasında:

Cmd.CommandText = "İşçidən " + ""İşçilərin sayı" kimi count(*) seçin";

İşçi cədvəlində sətirlərin sayını hesablamaq və nəticəni göstərmək üçün SELECT ifadəsindən istifadə edir. Komanda mətni cmd dəyişəninin CommandText xassəsini CreateCommand() metodu ilə qaytarılan nümunəyə təyin etməklə müəyyən edilir. Sonrakı adlanır ExecuteScalar() metodu SqlCommand nümunəsi. Bu üsul int tam məlumat növünə çevrilən və sətir dəyişəninə təyin edilən skalyar dəyəri qaytarır.

İndi bu kodu Visual Studio istifadə edərək tərtib edə bilərsiniz. Mən bu sinfi CLRStoredProcedures adı ilə layihəyə əlavə etdim, ona görə də Visual Studio eyniadlı montajı *.dll uzantısı ilə tərtib edəcək. Aşağıdakı nümunə saxlanılan prosedurun yaradılmasında növbəti addımı göstərir: işləmək üçün kodun yaradılması. Bu nümunədəki kodu icra etməzdən əvvəl siz tərtib edilmiş .dll faylının yerini bilməlisiniz (adətən layihənin Debug qovluğunda yerləşir).

Nümunə Db-dən istifadə edin; "D:\Projects\CLRStoredProcedures\bin\Debug\CLRStoredProcedures.dll"DƏN PERMISSION_SET = TƏHLÜKƏSİZLİK İLƏ CLRStoredProcedures YARATIN

CREATE ASSEMBLY bəyanatı idarə olunan kodu giriş kimi qəbul edir və ümumi dil işləmə vaxtı (CLR) saxlanan prosedurları, istifadəçi tərəfindən müəyyən edilmiş funksiyaları və tetikleyicileri yarada biləcəyiniz uyğun obyekt yaradır. Bu təlimat aşağıdakı sintaksisə malikdir:

YARAT ASSEMBLY assembly_name [ AUTORIZATION sahibi_name ] FROM (dll_fayl) Sintaksis konvensiyaları

assembly_name parametri montajın adını təyin edir. Könüllü AVTORIZASYON bəndi bu yığıncağın sahibi kimi rolun adını müəyyən edir. FROM bəndi yüklənəcək montajın yerləşdiyi yolu müəyyən edir.

WITH PERMISSION_SET bəndi CREATE ASSEMBLY ifadəsinin çox vacib bəndidir və həmişə göstərilməlidir. O, montaj koduna verilən giriş hüquqlarının dəstini müəyyən edir. SAFE hüquqlar dəsti ən məhdudlaşdırıcıdır. Bu hüquqlara malik olan montaj kodu fayllar kimi xarici sistem resurslarına daxil ola bilməz. EXTERNAL_ACCESS hüquqlar dəsti montaj koduna müəyyən xarici sistem resurslarına daxil olmağa imkan verir, UNSAFE hüquqlar dəsti isə verilənlər bazası sisteminin daxilində və xaricində resurslara məhdudiyyətsiz girişi təmin edir.

Yığma kodu məlumatını saxlamaq üçün istifadəçi YARATMA ASSEMBLY bəyanatını verə bilməlidir. Assambleya bəyanatı icra edən istifadəçiyə (və ya rola) məxsusdur. Siz CREATE SCHEMA bəyanatının AVTORIZASYON bəndindən istifadə edərək montajın sahibini dəyişə bilərsiniz.

Database Engine həmçinin ALTER ASSEMBLY və DROP ASSEMBLY ifadələrini dəstəkləyir. DEĞİŞTİRİLMƏK BİLDİRİMİ quruluşu yeniləmək üçün istifadə olunur son versiya. Bu təlimat həmçinin müvafiq montajla əlaqəli faylları əlavə edir və ya silir. YÜKLƏNMƏK BİLDİRİMİ göstərilən montajı və bütün əlaqəli faylları cari verilənlər bazasından silir.

Aşağıdakı nümunə əvvəllər həyata keçirilən idarə olunan kod əsasında saxlanılan prosedurun necə yaradılacağını göstərir:

Nümunə Db-dən istifadə edin; GEDİN PROSEDUR YARATIN CountEmployees XARİCİ ADI KİMİ CLRStoredProcedures.StoredProcedures.CountEmployees

Nümunədəki CREATE PROCEDURE ifadəsi əvvəlki nümunələrdəki eyni ifadədən fərqlidir, çünki tərkibində XARİCİ AD parametri. Bu seçim kodun CLR tərəfindən yaradıldığını müəyyən edir. Bu cümlədəki ad üç hissədən ibarətdir:

assembly_name.class_name.method_name

    assembly_name - montajın adını müəyyən edir;

    class_name - ümumi sinfin adını müəyyən edir;

    metod_adı - isteğe bağlı hissə, sinif daxilində təyin olunan metodun adını təyin edir.

CountEmployees prosedurunun icrası aşağıdakı nümunədə göstərilmişdir:

Nümunə Db-dən istifadə edin; DECLARE @count INT EXECUTE @count = CountEmployees PRINT @count -- 7 qaytarır

PRINT bəyanatı İşçi cədvəlindəki cari sıra sayını qaytarır.

Saxlanılan prosedurlar anlayışı müəyyən edilmişdir. Parametrləri olan saxlanılan prosedurların yaradılması, dəyişdirilməsi və istifadəsi nümunələri verilmişdir. Giriş və çıxış parametrlərinin tərifi verilmişdir. Saxlanılan prosedurların yaradılması və çağırılması nümunələri verilmişdir.

Saxlanılan prosedur anlayışı

Saxlanılan prosedurlar bir-biri ilə əlaqəli SQL ifadələri qruplarıdır, onlardan istifadə proqramçının işini asanlaşdırır və daha çevik edir, çünki icra etmək üçün saxlanılan prosedurçox vaxt fərdi SQL ifadələrinin ardıcıllığından daha sadədir. Saxlanılan prosedurlar bir və ya bir neçə SQL ifadəsi və ya funksiyasından ibarət olan və tərtib edilmiş formada verilənlər bazasında saxlanılan əmrlər toplusudur. Verilənlər bazasında icra saxlanılan prosedurlar Fərdi SQL ifadələri əvəzinə istifadəçiyə aşağıdakı üstünlükləri verir:

  • lazımi operatorlar artıq verilənlər bazasındadır;
  • hamısı mərhələ keçdi təhlil və icra edilə bilən formatdadır; əvvəl saxlanılan prosedurun icrası SQL Server onun üçün icra planı yaradır, optimallaşdırır və tərtib edir;
  • saxlanılan prosedurlar dəstək modul proqramlaşdırma, çünki onlar böyük tapşırıqları müstəqil, daha kiçik və asan idarə olunan hissələrə bölməyə imkan verir;
  • saxlanılan prosedurlar başqalarına səbəb ola bilər saxlanılan prosedurlar və funksiyaları;
  • saxlanılan prosedurlar digər növ tətbiq proqramlarından çağırıla bilər;
  • adətən, saxlanılan prosedurlar fərdi ifadələrin ardıcıllığından daha sürətli icra edilir;
  • saxlanılan prosedurlar istifadə etmək daha asandır: onlar onlarla və yüzlərlə əmrdən ibarət ola bilər, lakin onları işə salmaq üçün sadəcə istədiyinizin adını qeyd etmək kifayətdir. saxlanılan prosedur. Bu, müştəridən serverə göndərilən sorğunun ölçüsünü və deməli, şəbəkədəki yükü azaltmağa imkan verir.

Prosedurların yerinə yetirildiyi yerdə saxlanması şəbəkə üzərindən ötürülən məlumatların miqdarını azaldır və ümumi sistemin işini yaxşılaşdırır. Ərizə saxlanılan prosedurlar proqram təminatı sistemlərinin saxlanmasını və onlara dəyişikliklər edilməsini asanlaşdırır. Adətən, qaydalar və məlumatların emalı alqoritmləri şəklində bütün bütövlük məhdudiyyətləri verilənlər bazası serverində həyata keçirilir və toplu olaraq son proqram üçün mövcuddur. saxlanılan prosedurlar verilənlərin emalı interfeysini təmsil edən . Məlumatların bütövlüyünü təmin etmək, eləcə də təhlükəsizlik məqsədləri üçün proqram adətən məlumatlara birbaşa çıxış əldə etmir - onlarla bütün işlər bu və ya digərinə zəng etməklə həyata keçirilir. saxlanılan prosedurlar.

Bu yanaşma bütün şəbəkə istifadəçiləri üçün dərhal əlçatan olan məlumatların emalı alqoritmlərinin dəyişdirilməsini çox asanlaşdırır və tətbiqin özündə dəyişiklik etmədən sistemi genişləndirmək imkanı verir: dəyişdirmək kifayətdir. saxlanılan prosedur verilənlər bazası serverində. Tərtibatçıya tətbiqi yenidən tərtib etməyə, onun surətlərini yaratmağa, həmçinin istifadəçilərə yeni versiya ilə işləməyin zəruriliyi barədə təlimat verməyə ehtiyac yoxdur. İstifadəçilər sistemdə dəyişikliklərin edildiyindən belə xəbərdar olmaya bilərlər.

Saxlanılan prosedurlar cədvəllərdən və ya hər hansı digər verilənlər bazası obyektlərindən asılı olmayaraq mövcuddur. Onlar müştəri proqramı tərəfindən çağırılır, başqa saxlanılan prosedur və ya tətik. Tərtibatçı giriş hüquqlarını idarə edə bilər saxlanılan prosedur, onun icrasına icazə verən və ya qadağan edən. Kodu dəyişdirin saxlanılan prosedur yalnız onun sahibi və ya sabit verilənlər bazası rolunun üzvü tərəfindən icazə verilir. Lazım gələrsə, onun sahibliyini bir istifadəçidən digərinə keçirə bilərsiniz.

MS SQL Server mühitində saxlanılan prosedurlar

SQL Server ilə işləyərkən istifadəçilər müəyyən hərəkətləri həyata keçirən öz prosedurlarını yarada bilərlər. Saxlanılan prosedurlar tam hüquqlu verilənlər bazası obyektləridir və buna görə də onların hər biri xüsusi verilənlər bazasında saxlanılır. Birbaşa zəng saxlanılan prosedur yalnız prosedurun yerləşdiyi verilənlər bazası kontekstində yerinə yetirildikdə mümkündür.

Saxlanılan prosedurların növləri

SQL Serverdə bir neçə növ var saxlanılan prosedurlar.

  • Sistemli saxlanılan prosedurlar müxtəlif inzibati tədbirlərin həyata keçirilməsi üçün nəzərdə tutulmuşdur. Demək olar ki, bütün server idarəetmə hərəkətləri onların köməyi ilə həyata keçirilir. Sistem deyə bilərik saxlanılan prosedurlar sistem cədvəlləri ilə işi təmin edən interfeysdir ki, bu da son nəticədə həm istifadəçi, həm də sistem verilənlər bazalarının sistem cədvəllərindən məlumatların dəyişdirilməsi, əlavə edilməsi, silinməsi və əldə edilməsi ilə bağlıdır. Sistemli saxlanılan prosedurlar sp_ ilə prefiks olunur, sistem verilənlər bazasında saxlanılır və istənilən digər verilənlər bazası kontekstində çağırıla bilər.
  • Xüsusi saxlanılan prosedurlar müəyyən tədbirlər həyata keçirmək. Saxlanılan prosedurlar- tam verilənlər bazası obyekti. Bunun nəticəsində hər biri saxlanılan prosedur yerinə yetirildiyi xüsusi verilənlər bazasında yerləşir.
  • Müvəqqəti saxlanılan prosedurlar yalnız qısa müddətə mövcuddur, bundan sonra onlar server tərəfindən avtomatik məhv edilir. Onlar yerli və qlobal bölünür. Yerli müvəqqəti saxlanılan prosedurlar yalnız yarandıqları əlaqədən çağırıla bilər. Belə bir prosedur yaratarkən ona tək # simvolu ilə başlayan ad verilməlidir. Bütün müvəqqəti obyektlər kimi, saxlanılan prosedurlar istifadəçi serveri ayırdıqda, yenidən işə saldıqda və ya dayandırdıqda avtomatik olaraq silinir. Qlobal müvəqqəti saxlanılan prosedurlar eyni proseduru olan istənilən server bağlantısı üçün mövcuddur. Onu müəyyən etmək üçün ona ## simvolları ilə başlayan bir ad vermək kifayətdir. Bu prosedurlar server yenidən işə salındıqda və ya dayandırıldıqda və ya kontekstində yaradıldıqları əlaqə bağlandıqda silinir.

Saxlanılan prosedurların yaradılması, dəyişdirilməsi və silinməsi

yaradılış saxlanılan prosedur aşağıdakı vəzifələrin həllini nəzərdə tutur:

  • növünü müəyyən edir saxlanılan prosedur: müvəqqəti və ya xüsusi. Bundan əlavə, öz sisteminizi yarada bilərsiniz saxlanılan prosedur, ona sp_ prefiksi ilə ad vermək və sistem verilənlər bazasına yerləşdirmək. Belə prosedur yerli serverdə istənilən verilənlər bazası kontekstində mövcud olacaq;
  • girişin planlaşdırılması. Yaradarkən saxlanılan prosedur nəzərə alın ki, o, verilənlər bazası obyektlərinə onu yaradan istifadəçi ilə eyni giriş hüquqlarına malik olacaq;
  • tərif saxlanılan prosedur parametrləri. Əksər proqramlaşdırma dillərində olan prosedurlar kimi, saxlanılan prosedurlar giriş və çıxış parametrləri ola bilər;
  • kodun inkişafı saxlanılan prosedur. Prosedur kodu başqalarına zəng etmək də daxil olmaqla istənilən SQL əmrlərinin ardıcıllığını ehtiva edə bilər. saxlanılan prosedurlar.

Yenisini yaratmaq və mövcud olanı dəyişdirmək saxlanılan prosedur aşağıdakı komanda ilə edilir:

<определение_процедуры>::= (CREATE | ALTER ) PROC prosedur_adı [;nömrə] [(@parametr_adı məlumat növü ) [=default] ][,...n] AS sql_statement [...n]

Bu əmrin parametrlərini nəzərdən keçirin.

sp_, #, ## prefikslərindən istifadə etməklə yaradılmış prosedur sistem və ya müvəqqəti prosedur kimi müəyyən edilə bilər. Komandanın sintaksisindən də göründüyü kimi, yaradılan prosedurun aid olacağı sahibin adının, habelə onun yerləşdirilməli olduğu verilənlər bazasının adının göstərilməsinə icazə verilmir. Beləliklə, yaradılmışları yerləşdirmək üçün saxlanılan prosedur xüsusi verilənlər bazasında siz həmin verilənlər bazası kontekstində CREATE PROCEDURE əmrini icra etməlisiniz. Bədəndən idarə edildikdə saxlanılan prosedur Qısaldılmış adlar eyni verilənlər bazasındakı obyektlər üçün istifadə edilə bilər, yəni verilənlər bazası adı göstərilmədən. Başqa verilənlər bazalarında yerləşən obyektlərə istinad etmək istədiyiniz zaman verilənlər bazası adının göstərilməsi məcburidir.

Addakı nömrə eyniləşdirmə nömrəsidir saxlanılan prosedur, onu bir qrup prosedurda unikal şəkildə müəyyən edir. Prosedurların idarə edilməsinin rahatlığı üçün məntiqi olaraq eyni tip saxlanılan prosedurlar onlara eyni ad, lakin fərqli identifikasiya nömrələri verilməklə qruplaşdırıla bilər.

Yaradılmış giriş və çıxış məlumatlarını ötürmək üçün saxlanılan prosedur parametrlərdən istifadə oluna bilər, onların adları yerli dəyişənlərin adları kimi @ simvolu ilə başlamalıdır. bir saxlanılan prosedur Siz vergüllə ayrılmış bir neçə variantı təyin edə bilərsiniz. Prosedurun gövdəsi adları prosedurun parametrlərinin adları ilə eyni olan yerli dəyişənlərdən istifadə etməməlidir.

Müvafiq olan məlumat növünü müəyyən etmək saxlanılan prosedur parametri, istifadəçi tərəfindən təyin olunanlar da daxil olmaqla istənilən SQL məlumat növü yaxşıdır. Bununla belə, CURSOR məlumat növü yalnız olaraq istifadə edilə bilər çıxış parametri saxlanılan prosedur, yəni. OUTPUT açar sözü ilə.

OUTPUT açar sözünün olması o deməkdir ki, müvafiq parametr ondan məlumatları qaytarmaq üçün nəzərdə tutulub saxlanılan prosedur. Ancaq bu, heç də parametrin dəyərləri ötürmək üçün uyğun olmadığını ifadə etmir saxlanılan prosedur. OUTPUT açar sözünün təyin edilməsi serverdən çıxmağı əmr edir saxlanılan prosedur parametrin cari dəyərini prosedurun parametrin dəyəri kimi çağırıldığı zaman təyin edilmiş yerli dəyişənə təyin etmək. Nəzərə alın ki, OUTPUT açar sözünü təyin edərkən proseduru çağırarkən müvafiq parametrin dəyəri yalnız lokal dəyişəndən istifadə etməklə təyin edilə bilər. Normal parametrlər üçün icazə verilən hər hansı ifadə və ya sabitlərə icazə verilmir.

VARYING açar sözü CURSOR tipli OUTPUT parametri ilə birlikdə istifadə olunur. Bunu müəyyən edir çıxış parametri nəticə dəsti olacaq.

DEFAULT açar sözü uyğun olan dəyərdir cari tənzimləmə. Beləliklə, proseduru çağırarkən, müvafiq parametrin dəyərini açıq şəkildə göstərə bilməzsiniz.

Server sorğunun icra planını və tərtib edilmiş kodu önbelleğe aldığından, növbəti dəfə prosedur çağırıldıqda artıq hazırlanmış dəyərlərdən istifadə olunacaq. Bununla belə, bəzi hallarda hələ də prosedur kodunu yenidən tərtib etmək lazımdır. RECOMPILE açar sözünün təyin edilməsi sistemə icra planı yaratmağı tapşırır saxlanılan prosedur hər dəfə çağırılır.

Məlumatların təkrarlanması və yaradılan daxil edilərkən FOR REPLICATION parametri tələb olunur saxlanılan prosedur nəşrdə məqalə kimi.

ENCRYPTION açar sözü serverə kodu şifrələməyi əmr edir saxlanılan prosedur, işi həyata keçirən müəllif hüququ alqoritmlərinin istifadəsinə qarşı müdafiəni təmin edə bilər saxlanılan prosedur.

AS açar sözü faktiki gövdənin əvvəlində yerləşdirilir saxlanılan prosedur, yəni. köməyi ilə bu və ya digər hərəkətin həyata keçiriləcəyi SQL əmrləri dəsti. Prosedurun mətnində demək olar ki, bütün SQL əmrləri istifadə edilə bilər, əməliyyatlar elan edilə bilər, kilidlər təyin edilə bilər və digərləri çağırıla bilər. saxlanılan prosedurlar. -dən çıxış saxlanılan prosedur RETURN əmri ilə edilə bilər.

Saxlanılan prosedurun silinməsiəmri ilə həyata keçirilir:

DÖNÜŞ PROSEDURU (prosedurun_adı) [,...n]

Saxlanılan Prosedurun İcrası

üçün saxlanılan prosedurun icrasıəmrdən istifadə olunur:

[[ EXEC [ UTE] prosedur_adı [;nömrə] [[@parametr_adı=](dəyər | @dəyişən_adı) |][,...n]

Zəng olarsa saxlanılan prosedur paketdəki yeganə əmr deyil, o zaman EXECUTE əmrinin olması tələb olunur. Bundan əlavə, bu əmr başqa bir prosedurun və ya triggerin gövdəsindən proseduru çağırmaq üçün tələb olunur.

Proseduru çağırarkən OUTPUT açar sözünün istifadəsinə yalnız elan edilmiş parametrlər üçün icazə verilir. prosedurun yaradılması OUTPUT açar sözü ilə.

Prosedur çağırışı üçün DEFAULT açar sözü təyin edildikdə, DEFAULT açar sözü istifadə olunacaq. cari dəyər. Təbii ki, göstərilən DEFAULT sözünə yalnız onun təyin olunduğu parametrlər üçün icazə verilir cari dəyər.

EXECUTE əmrinin sintaksisindən proseduru çağırarkən parametr adlarının buraxıla biləcəyini görə bilərsiniz. Bununla belə, bu halda istifadəçi parametrlərin dəyərlərini siyahıya alındığı sırada eyni şəkildə göstərməlidir. prosedurun yaradılması. Parametrə təyin edin cari dəyər, sadalamaq mümkün olmadıqda onu sadəcə atlayın. Bunun üçün parametrlərin buraxılması tələb olunarsa cari dəyər, zəng edərkən parametr adlarını açıq şəkildə göstərmək kifayətdir saxlanılan prosedur. Üstəlik, bu şəkildə parametrləri və onların dəyərlərini istənilən qaydada sadalaya bilərsiniz.

Qeyd edək ki, prosedur çağırılan zaman ya dəyərləri olan parametr adları, ya da yalnız parametr adı olmayan dəyərlər göstərilir. Onların birləşməsinə icazə verilmir.

Misal 12.1. Parametrsiz prosedur. İvanov tərəfindən alınmış malların adlarının və qiymətlərinin alınması prosedurunu işləyib hazırlayın.

MÜŞTƏRİDƏN DAXİLİ QOŞULUŞDAN (Müştəri.ItemId=Trade.ItemId) Müştəri.CustomerCode.CustomerCode.CustomerCodeC-də Element.Ad, Əşya.Qiymət*Ticarət.Kəmiyyət, Müştəri.Soyadı SEÇMƏK KİMİ PROC my_proc1 YARATIN Müştəri .Soyadı='İvanov' Misal 12.1. İvanovun aldığı malların adlarının və qiymətlərinin alınması qaydası.

üçün prosedura çağırınəmrlərdən istifadə edilə bilər:

EXEC my_proc1 və ya my_proc1

Prosedur məlumat dəstini qaytarır.

Misal 12.2. Parametrsiz prosedur. Birinci dərəcəli əşyanın qiymətini 10% azaltmaq üçün prosedur yaradın.

üçün prosedura çağırınəmrlərdən istifadə edilə bilər:

EXEC my_proc2 və ya my_proc2

Prosedur heç bir məlumatı qaytarmır.

Misal 12.3. Giriş parametri ilə prosedur. Verilmiş müştərinin aldığı əşyaların adlarını və qiymətlərini əldə etmək üçün prosedur yaradın.

PROC my_proc3 @k VARCHAR(20) YARADIN MÜŞTƏRİNDƏN Əşya.Adı, Əşya.Qiymət*Ticarət.Məqsədə Xərc, Müştəri.Soyadı Müştəri DAXİLİ QOŞULUŞDAN (Element DAXİLİ QOŞULUŞTIRMA ÜZRƏ İTem.ItemID=Trade.ItemID.Cusmer) =Deal.ClientID HARADA Müştəri.Soyadı [email protected] Misal 12.3. Müəyyən bir müştəri tərəfindən satın alınan əşyaların adlarını və qiymətlərini əldə etmək proseduru.

üçün prosedura çağırınəmrlərdən istifadə edilə bilər:

EXEC my_proc3 "İvanov" və ya my_proc3 @k="İvanov"

Misal 12.4.. Müəyyən edilmiş %-ə uyğun olaraq verilmiş bir növ məhsulun qiymətinin aşağı salınması prosedurunu yaradın.

üçün prosedura çağırınəmrlərdən istifadə edilə bilər:

EXEC my_proc4 "Waffle",0.05 və ya EXEC my_proc4 @t="Vaffle", @p=0.05

Misal 12.5. Giriş parametrləri ilə prosedur və standart dəyərlər. Müəyyən edilmiş %-ə uyğun olaraq verilmiş bir növ məhsulun qiymətinin aşağı salınması prosedurunu yaradın.

PROC CREATE my_proc5 @t VARCHAR(20)='Candy`, @p FLOAT=0.1 YENİLƏNMƏK KİMİ Maddə SET Qiymət=Qiymət*( [email protected]) WHERE Növü [email protected] Misal 12.5. Giriş parametrləri və standart dəyərlərlə prosedur. Müəyyən edilmiş %-ə uyğun olaraq verilmiş bir növ məhsulun qiymətinin aşağı salınması prosedurunu yaradın.

üçün prosedura çağırınəmrlərdən istifadə edilə bilər:

EXEC my_proc5 "Waffle",0.05 və ya EXEC my_proc5 @t="Vafli", @p=0.05 və ya EXEC my_proc5 @p=0.05

Bu zaman şirniyyatların qiyməti aşağı düşür (prosedur çağırılarkən növün dəyəri göstərilmir və standart olaraq götürülür).

Sonuncu halda, proseduru çağırarkən hər iki parametr (həm növ, həm də faiz) göstərilmir, onların dəyərləri standart olaraq qəbul edilir.

Misal 12.6. Giriş və çıxış parametrləri ilə prosedur. Müəyyən bir ayda satılan malların ümumi dəyərini müəyyən etmək üçün prosedur yaradın.

PROC YARADIN my_proc6 @m INT, @s FLOAT ÇIXIŞI SEÇİLƏK KİMİ @s=Məlumat(Məlumat.Qiymət*Ticarət.Miqdar) İÇİNDƏN DAXİLİ Ticarətə QOŞULUN Item.ItemID=Trade.ItemID QRUP AY (Ticarət.Tarix) AY (Ticarət.Date) Müqavilə.Tarix) [email protected] Misal 12.6. Giriş və çıxış parametrləri ilə prosedur. Müəyyən bir ayda satılan malların ümumi dəyərini müəyyən etmək üçün prosedur yaradın.

üçün prosedura çağırınəmrlərdən istifadə edilə bilər:

ELAN EDİN @st FLOAT EXEC my_proc6 1,@st OUTPUT SELECT @st

Bu əmrlər bloku yanvar ayında satılan malların dəyərini müəyyən etməyə imkan verir ( giriş parametri ay 1 olaraq təyin olunur).

Müəyyən bir işçinin işlədiyi firma tərəfindən alınan malların ümumi miqdarını müəyyən etmək üçün prosedur yaradın.

Birincisi, işçinin işlədiyi şirkəti müəyyənləşdirmək üçün prosedur hazırlayacağıq.

Misal 12.7.İstifadəsi yuvalanmış prosedurlar. Müəyyən bir işçinin işlədiyi firma tərəfindən alınan malların ümumi miqdarını müəyyən etmək üçün prosedur yaradın.

Sonra bizi maraqlandıran firma tərəfindən alınan malların ümumi məbləğini hesablayan bir prosedur yaradacağıq.

PROC YARATIN my_proc8 @fam VARCHAR(20), @kol GİRİŞ ÇIXIŞI ELAN KİMİ @firm VARCHAR(20) EXEC my_proc7 @fam,@firm ÇIXIŞ SEÇİN @kol=Müştəridən Cəmi(Ticarət.Miqdar) DAXİLİ Ticarətə QOŞULUN. Deal.ClientCode QRUPU Müştəriyə görə.Şirkət Client.Company OLAN [email protected] Misal 12.7. Müəyyən bir işçinin işlədiyi firma tərəfindən alınan malların ümumi miqdarını müəyyən etmək üçün prosedur yaradın.

Prosedur əmrdən istifadə edərək çağırılır:

ELAN EDİN @k INT EXEC my_proc8 ‘Ivanov’,@k OUTPUT SELECT @k