SQL-də saxlanılan prosedur nədir. Nümunələr üçün ilkin məlumatlar. "Saxlanılan prosedur və görünüş arasındakı fərq nədir?"

saxlanılan prosedur - verilənlər bazası obyekti, bir dəfə tərtib edilən və serverdə saxlanılan SQL ifadələri toplusudur. Saxlanılan prosedurlar yüksək səviyyəli dillərdə adi prosedurlara çox bənzəyir, onların giriş-çıxış parametrləri və lokal dəyişənləri ola bilər, simvol verilənləri üzərində rəqəmsal hesablamalar və əməliyyatlar həyata keçirə bilər, onların nəticələri dəyişənlərə və parametrlərə təyin edilə bilər. Saxlanan prosedurlar standart verilənlər bazası əməliyyatlarını yerinə yetirə bilər (həm DDL, həm də DML). Bundan əlavə, saxlanılan prosedurlarda döngələr və filiallar mümkündür, yəni icra prosesini idarə etmək üçün təlimatlardan istifadə edə bilərlər.

Saxlanılan prosedurlar istifadəçi tərəfindən müəyyən edilmiş funksiyalara (UDF) bənzəyir. Əsas fərq ondan ibarətdir ki, istifadəçi tərəfindən müəyyən edilmiş funksiyalar SQL sorğusunda hər hansı digər ifadə kimi istifadə oluna bilər, saxlanılan prosedurlar isə CALL funksiyasından istifadə etməklə çağırılmalıdır:

ZƏNG proseduru (...)

EXECUTE proseduru (...)

Saxlanılan prosedurlar nəticə dəstlərini, yəni SELECT sorğusunun nəticələrini qaytara bilər. Belə nəticə dəstləri kursorlardan istifadə etməklə, nəticə dəsti göstəricisini qaytaran digər saxlanılan prosedurlar və ya proqramlar vasitəsilə işlənə bilər. Saxlanan prosedurlar həmçinin verilənlərin və kursorların idarə edilməsi üçün elan edilmiş dəyişənləri ehtiva edə bilər ki, bu da sizə cədvəldə çoxlu sətirlər üzərində dövrə vurmağa imkan verir. SQL standartı IF, LOOP, REPEAT, CASE və işləmək üçün bir çox başqa ifadələri təmin edir. Saxlanılan prosedurlar dəyişənin elan olunduğu yerdən asılı olaraq dəyişənləri qəbul edə, nəticələri qaytara və ya dəyişənləri dəyişdirə və qaytara bilər.

Saxlanılan prosedurların həyata keçirilməsi bir DBMS-dən digərinə dəyişir. Ən böyük verilənlər bazası təchizatçıları onları bu və ya digər formada dəstəkləyir. DBMS-dən asılı olaraq saxlanılan prosedurlar SQL, Java, C və ya C++ kimi müxtəlif proqramlaşdırma dillərində həyata keçirilə bilər. Qeyri-SQL-də yazılmış saxlanan prosedurlar SQL sorğularını özbaşına yerinə yetirə və ya yerinə yetirməyə də bilər.

Arxada

    Məntiqin digər proqramlarla paylaşılması. Saxlanan prosedurlar funksionallığı əhatə edir; bu, müxtəlif proqramlar arasında məlumat girişini və idarəetmə bağlantısını təmin edir.

    İstifadəçiləri verilənlər bazası cədvəllərindən təcrid edin. Bu, cədvəl məlumatlarının özünə deyil, saxlanılan prosedurlara giriş imkanı verir.

    Qoruma mexanizmi təmin edir. Əvvəlki bəndə əsasən, əgər siz məlumatlara yalnız saxlanılan prosedurlar vasitəsilə daxil ola bilirsinizsə, SQL DELETE əmri vasitəsilə başqa heç kim məlumatlarınızı silə bilməz.

    Azaldılmış şəbəkə trafiki nəticəsində təkmilləşdirilmiş performans. Saxlanılan prosedurlarla çoxlu sorğular birləşdirilə bilər.

qarşı

    İşin çox hissəsi server tərəfində, daha az isə müştəri tərəfində görüldüyünə görə verilənlər bazası serverinə yüklənmənin artması.

    Çox şey öyrənməlisən. Saxlanılan prosedurlarınızı yazmaq üçün MySQL ifadə sintaksisini öyrənməlisiniz.

    Tətbiq məntiqinizi iki yerdə təkrar edirsiniz: server kodu və saxlanılan prosedurlar üçün kodlar, bununla da verilənlərin manipulyasiya prosesini çətinləşdirir.

    Bir DBMS-dən digərinə köçürmə (DB2, SQL Server s.) problemlərə yol aça bilər.

Saxlanılan Prosedurların Məqsədi və Faydaları

Saxlanan prosedurlar performansı yaxşılaşdırır, proqramlaşdırma seçimlərini təkmilləşdirir və məlumat təhlükəsizliyi xüsusiyyətlərini dəstəkləyir.

Müştərilər tez-tez istifadə olunan sorğunu saxlamaq əvəzinə müvafiq saxlanılan prosedura müraciət edə bilərlər. Saxlanılan prosedur çağırıldıqda, onun məzmunu dərhal server tərəfindən işlənir.

Sorğunun faktiki icrası ilə yanaşı, saxlanılan prosedurlar həmçinin hesablamalar aparmağa və verilənlərlə manipulyasiya etməyə imkan verir - DDL ifadələrini dəyişdirmək, silmək, icra etmək (bütün DBMS-lərdə deyil!) və digər saxlanılan prosedurları çağırmaq, mürəkkəb əməliyyat məntiqini yerinə yetirmək. Tək bir ifadə, saxlanılan prosedurun tərkibində olan mürəkkəb skripti çağırmağa imkan verir ki, bu da şəbəkə üzərindən yüzlərlə əmr göndərməkdən və xüsusən də müştəridən serverə böyük miqdarda məlumat ötürmək ehtiyacından qaçır.

Əksər DBMS-lərdə saxlanılan prosedur ilk dəfə işə salındıqda, o tərtib edilir (analiz edilir və verilənlərə giriş planı yaradılır). Gələcəkdə onun işlənməsi daha sürətli olur. Oracle DBMS verilənlər lüğətində saxlanılan saxlanılan prosedur kodunu şərh edir. Oracle 10g-dən başlayaraq C-də saxlanılan prosedur kodunun doğma kompilyasiyası (doğma kompilyasiya) və daha sonra hədəf maşının maşın koduna dəstəklənir, bundan sonra saxlanılan prosedur çağırıldıqda onun tərtib edilmiş obyekt kodu birbaşa edam edildi.

Proqramlaşdırma variantları

Saxlanılan proseduru yaratdıqdan sonra ona istənilən vaxt zəng edə bilərsiniz ki, bu da modulluğu təmin edir və kodun təkrar istifadəsini təşviq edir. Sonuncu, verilənlər bazasını saxlamağı asanlaşdırır, çünki o, biznes qaydalarının dəyişməsindən təcrid olunur. İstənilən vaxt yeni qaydalara riayət etmək üçün saxlanılan proseduru dəyişdirə bilərsiniz. Bundan sonra, ondan istifadə edən bütün tətbiqlər birbaşa dəyişdirilmədən avtomatik olaraq yeni iş qaydalarına uyğun olacaq.

Təhlükəsizlik

Saxlanılan prosedurların istifadəsi sizə verilənlər bazası cədvəllərinə birbaşa istifadəçi girişini məhdudlaşdırmağa və ya tamamilə istisna etməyə imkan verir, istifadəçilərə yalnız məlumatlara dolayı və ciddi şəkildə tənzimlənən girişi təmin edən saxlanılan prosedurları yerinə yetirmək üçün icazələr buraxır. Bundan əlavə, bəzi DBMS-lər saxlanılan prosedurun mətn şifrlənməsini (qablaşdırmasını) dəstəkləyir.

Bu təhlükəsizlik xüsusiyyətləri verilənlər bazası strukturunu istifadəçidən təcrid etməyə imkan verir ki, bu da verilənlər bazasının bütövlüyünü və etibarlılığını təmin edir.

"SQL injection" kimi hərəkətlər daha az ehtimal olunur, çünki yaxşı yazılmış saxlanılan prosedurlar sorğunu DBMS-ə ötürməzdən əvvəl əlavə olaraq daxiletmə parametrlərini təsdiqləyir.

Saxlanılan Prosedurların həyata keçirilməsi

Saxlanılan prosedurlar adətən SQL dilindən və ya onun seçilmiş DBMS-də xüsusi tətbiqindən istifadə etməklə yaradılır. Məsələn, bu məqsədlər üçün Microsoft SQL Server DBMS-də Transact-SQL, Oracle-da PL/SQL, InterBase və Firebird-də PSQL, PostgreSQL-də PL/pgSQL, PL/Tcl, PL/Perl, PL/Python, IBM var. DB2 - SQL / PL (İngilis dili), Informix-də - SPL. MySQL SQL:2003 standartını olduqca yaxından izləyir və onun dili SQL/PL ilə oxşardır.

Bəzi DBMS-lərdə C++ və ya Delphi kimi müstəqil icra edilə bilən fayllar yaratmağa qadir olan istənilən proqramlaşdırma dilində yazılmış saxlanılan prosedurlardan istifadə etmək mümkündür. Microsoft SQL Server terminologiyasında bu prosedurlar genişləndirilmiş saxlanılan prosedurlar adlanır və sadəcə Win32-DLL-də olan funksiyalardır. Və, məsələn, DLL / SO-dan çağırılan funksiyalar üçün Interbase və Firebird-də başqa bir ad təyin olunur - UDF (User Defined Function). MS SQL 2005-də saxlanılan prosedurları istənilən .NET dilində yazmaq mümkün oldu və gələcəkdə genişləndirilmiş saxlanılan prosedurlardan imtina edilməsi planlaşdırılır. Oracle DBMS, öz növbəsində, saxlanılan prosedurları yazmağa imkan verir Java dili. IBM DB2-də saxlanılan prosedurların və funksiyaların adi proqramlaşdırma dillərində yazılması əvvəldən dəstəklənən ənənəvi üsuldur və SQL prosedur genişləndirməsi bu DBMS-ə ANSI standartına daxil edildikdən sonra çox gec əlavə edilmişdir. Informix həmçinin Java və C prosedurlarını dəstəkləyir.

Oracle DBMS-də saxlanılan prosedurlar sözdə paketlərə birləşdirilə bilər. Paket iki hissədən - saxlanılan prosedurun tərifini təyin edən spesifikasiyadan (İngilis dili paketinin spesifikasiyası) və onun icrasının yerləşdiyi korpusdan (İngilis dili paketinin bədəni) ibarətdir. Beləliklə, Oracle proqram kodunun interfeysini onun həyata keçirilməsindən ayırmağa imkan verir.

IBM DB2-də saxlanılan prosedurlar modullara birləşdirilə bilər.

Sintaksis

PROSEDUR YARADIN `p2`()

SQL TƏHLÜKƏSİZLİK MÜƏYYƏNİCİSİ

ŞƏRH "Prosedur"

"Salam Dünya!" SEÇİN;

Kodun birinci hissəsi saxlanılan prosedur yaradır. Sonrakı - isteğe bağlı parametrləri ehtiva edir. Sonra ad və nəhayət prosedurun özü gəlir.

Saxlanan prosedurun 4 xüsusiyyəti:

Dil: Taşınma məqsədləri üçün standart SQL-dir.

Deterministik: Əgər prosedur hər zaman eyni nəticəni qaytarırsa və eyni giriş parametrlərini alırsa. Bu, təkrarlama və qeydiyyat prosesi üçündür. Defolt dəyər DETERMINISTIC DEYİL.

SQL Təhlükəsizliyi: Zəng zamanı istifadəçinin hüquqları yoxlanılır. INVOKER saxlanılan proseduru çağıran istifadəçidir. DEFINER prosedurun "yaradıcısıdır". Defolt dəyər DEFINER-dir.

Şərh: sənədləşdirmə məqsədləri üçün standart dəyər ""-dir.

Saxlanılan prosedurun çağırılması

saxlanılan_prosedur_adı (param1, param2, ....)

CALL proseduru1(10 , "sətir parametri" , @parameter_var);

Saxlanılan prosedurun dəyişdirilməsi

MySQL-də prosedurların dəyişdirilməsi üçün ALTER PROCEDURE bəyanatı var, lakin o, yalnız müəyyən xüsusiyyətlərin dəyişdirilməsi üçün uyğundur. Parametrləri və ya prosedurun gövdəsini dəyişdirmək lazımdırsa, onu silməli və yenidən yaratmalısınız.

Silinməsaxlanılırprosedurlar

MÖVCUD OLARSA DÖKMƏ PROSEDURU p2;

Bu sadə bir əmrdir. Əgər belə bir prosedur yoxdursa, IF EXISTS ifadəsi xətanı tutur.

Seçimlər

CREATE PROCEDURE proc1(): boş parametrlər siyahısı

CREATE PROCEDURE proc1 (Varname DATA-TYPE): bir giriş parametri. IN sözü isteğe bağlıdır, çünki standart parametrlər IN (daxil olan)dır.

CREATE PROCEDURE proc1 (OUT varname DATA-TYPE): bir qaytarma parametri.

CREATE PROCEDURE proc1 (INOUT varname DATA-TYPE): bir parametr, həm giriş, həm də çıxış.

Dəyişən elan etmək üçün sintaksis belə görünür:

varname DATA-TYPE DEFAULT defaultvalue ELAN EDİN;

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. Saxlanılan prosedurun birbaşa çağırılması yalnız prosedurun yerləşdiyi verilənlər bazası kontekstində yerinə yetirildikdə mümkündür.

Saxlanılan prosedurların növləri

SQL Server bir neçə növ saxlanılan prosedurlara malikdir.

    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. Demək olar ki, sistemdə saxlanılan prosedurlar sistem cədvəlləri ilə işi təmin edən interfeysdir və nəticə etibarilə 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ə nəticələnir. 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.

tetikler

tetikler saxlanılan prosedurların növlərindən biridir. Onların icrası cədvəldə verilənlərin manipulyasiya dili (DML) bəyanatı yerinə yetirildikdə baş verir. Tətiklər məlumatların bütövlüyünü yoxlamaq və həmçinin əməliyyatları geri qaytarmaq üçün istifadə olunur.

Tətik icrası əlaqəli verilənlər bazası daxilində müəyyən hadisələrin baş verməsi ilə müəyyən edilən tərtib edilmiş SQL prosedurudur. Tətiklərin istifadəsi, əksər hallarda verilənlər bazası istifadəçiləri üçün çox rahatdır. Lakin onların istifadəsi çox vaxt I/O əməliyyatları üçün əlavə resurs xərcləri ilə əlaqələndirilir. Saxlanılan prosedurlardan və ya tətbiqlərdən istifadə etməklə eyni nəticələrə (daha az resurs xərcləri ilə) nail olmaq mümkün olduqda, tetikleyiciler uyğun deyildir.

tetikler verilənlər bazasında məlumatların bütövlüyünü qorumaq üçün istifadə edilən xüsusi SQL server alətidir. Dürüstlük məhdudiyyətləri, qaydalar və defoltlar həmişə istənilən funksionallıq səviyyəsini təmin etməyə bilər. Çox vaxt onların etibarlı və real olmasını təmin etmək üçün mürəkkəb məlumatların təsdiqlənməsi alqoritmlərini tətbiq etmək lazımdır. Bundan əlavə, bəzən lazım olduqda əlaqəli məlumatları dəyişdirmək üçün cədvəl dəyərlərindəki dəyişiklikləri izləmək lazımdır. Tətiklər bütün əməliyyatlar qaydalara, standart dəyərlərə və s. uyğun olaraq yerinə yetirildikdən sonra qüvvəyə minən bir növ filtr kimi düşünülə bilər.

Tətik tetikleyicilərin əlaqəli olduğu cədvəllərdəki məlumatları dəyişdirməyə çalışarkən server tərəfindən avtomatik olaraq idarə olunan saxlanılan prosedurun xüsusi növüdür. Hər Tətik müəyyən bir cədvələ bağlıdır. Onun etdiyi bütün məlumat dəyişiklikləri bir əməliyyat kimi qəbul edilir. Səhv və ya məlumatların bütövlüyünün pozulması aşkar edilərsə, əməliyyat geri qaytarılır. Buna görə də dəyişikliklər qadağandır. Tətik tərəfindən artıq edilən hər hansı dəyişikliklər də geri qaytarılır.

yaradır tətik yalnız verilənlər bazasının sahibidir. Bu məhdudiyyət cədvəllərin strukturunda təsadüfi dəyişikliklərdən, digər obyektləri onlarla əlaqələndirmək yollarından və s.

Tətikçox faydalı və eyni zamanda təhlükəli vasitədir. Beləliklə, işinin səhv məntiqi ilə siz bütün verilənlər bazasını asanlıqla məhv edə bilərsiniz, buna görə də tetikleyiciler çox diqqətlə düzəldilməlidir.

Adi alt proqramdan fərqli olaraq, tətik trigger hadisəsi hər dəfə baş verəndə dolayı şəkildə icra olunur və onun heç bir arqumenti yoxdur. Onu aktivləşdirmək bəzən tətiyi işə salmaq adlanır. Tətiklər aşağıdakı məqsədlərə çatır:

    daxil edilmiş məlumatların təsdiqi və cədvəldə müəyyən edilmiş bütövlüyün məhdudlaşdırılması ilə təmin edilməsi çətin, hətta qeyri-mümkün olan mürəkkəb məlumatların bütövlüyü məhdudiyyətlərinin həyata keçirilməsi;

    müəyyən bir şəkildə həyata keçirilən cədvəli yeniləyərkən müəyyən hərəkətlərin yerinə yetirilməsinin zəruriliyini xatırladan xəbərdarlıqların verilməsi;

    edilən dəyişikliklər və onları həyata keçirən şəxslər haqqında məlumatların qeyd edilməsi yolu ilə audit məlumatlarının toplanması;

    replikasiya dəstəyi.

CREATE TRIGGER əmrinin əsas formatı aşağıda göstərilmişdir:

<Определение_триггера>::=

TRIGGER trigger_name YARATIN

ƏVVƏL | SONRA<триггерное_событие>

ON<имя_таблицы>

<список_старых_или_новых_псевдонимов>]

<тело_триггера>

Tətik hadisələri cədvələ sətirlərin daxil edilməsi, silinməsi və yenilənməsindən ibarətdir. Sonuncu halda, trigger hadisəsi üçün xüsusi cədvəl sütun adları təyin edilə bilər. Triggerin başlama vaxtı BEFORE açar sözlərindən istifadə etməklə müəyyən edilir ( Tətik onunla əlaqəli hadisələrin icrasından əvvəl) və ya SONRA (onların icrasından sonra).

Tətik tərəfindən yerinə yetirilən hərəkətlər bu hadisə ilə əhatə olunan hər bir sıra üçün (HƏR SƏTİR ÜÇÜN) və ya hər hadisə üçün (HƏR BƏYANAT ÜÇÜN) yalnız bir dəfə təyin edilir.

Yanlış yazılmış tetikler, "ölü" kilidlərin görünüşü kimi ciddi problemlərə səbəb ola bilər. Tetikleyiciler bir çox resursu uzun müddət bloklaya bilər, ona görə də diqqət etməlisiniz Xüsusi diqqət giriş münaqişələrini minimuma endirmək üçün.

Tətik yalnız cari verilənlər bazasında yaradıla bilər, lakin uzaq serverdə yerləşənlər də daxil olmaqla, digər verilənlər bazalarına trigger daxilində daxil olmaq olar.

1. Prosedurlarınıza sətri daxil edin - SET NOCOUNT ON: Hər bir DML ifadəsi ilə SQL server diqqətlə bizə emal edilmiş qeydlərin sayını ehtiva edən bir mesaj qaytarır. Bu məlumat kodu sazlayarkən bizim üçün faydalı ola bilər, lakin bundan sonra tamamilə faydasız olacaq. SET NOCOUNT ON yazmaqla bu funksiyanı ləğv edirik. Çoxsaylı ifadələr və ya döngələr olan saxlanılan prosedurlar üçün bu hərəkət performansı əhəmiyyətli dərəcədə artıra bilər, çünki trafikin miqdarı əhəmiyyətli dərəcədə azalacaq.

PROC dbo.ProcName YARADIN
AS
NO COUNT ON SET;
--Prosedur kodu burada
dbo.TblCədvəl1-DƏN sütun1 SEÇİN
--SET NOCOUNT-u ilkin vəziyyətə keçirin
SAYI SÖNDÜRMƏNİ SET;
GO

2. Obyekt adı ilə sxem adından istifadə edin: Yaxşı, məncə, aydındır. Bu əməliyyat serverə obyektləri harada axtarmaq lazım olduğunu söyləyir və zibil qutularını təsadüfi qarışdırmaq əvəzinə, hara getməli olduğunu və nə götürəcəyini dərhal biləcək. Çoxlu sayda verilənlər bazası, cədvəllər və saxlanılan prosedurlarla o, vaxtımıza və əsəblərimizə əhəmiyyətli dərəcədə qənaət edə bilər.

dbo.MyTable FROM * SEÇİN --Bunu etmək üçün yaxşı bir yoldur
-- Əvəzinə
Cədvəldən * SEÇİN - Bu pis bir işdir
--Prosedur çağırışı
EXEC dbo.MyProc -- Yenə yaxşıdır
--Əvəzinə
EXEC MyProc - Pis!

3. Saxlanılan prosedurlarınızın adında "sp_" prefiksini istifadə etməyin: Prosedur adımız "sp_" ilə başlayırsa, SQL Server əvvəlcə öz əsas verilənlər bazasına baxacaq. Fakt budur ki, bu prefiks serverin şəxsi daxili saxlanılan prosedurları üçün istifadə olunur. Buna görə də, verilənlər bazasında sizinkinizlə eyni adlı prosedur aşkar edilərsə, onun istifadəsi əlavə xərclərə və hətta səhv nəticələrə səbəb ola bilər.

4. IF EXISTS (SEÇİN *) əvəzinə IF EXISTS (SEÇİN 1) istifadə edin: Başqa cədvəldə qeydin olub-olmadığını yoxlamaq üçün IF EXISTS ifadəsindən istifadə edirik. Bu ifadə daxili ifadədən ən azı bir dəyər qaytarıldıqda doğru qaytarır, bunun "1", bütün sütunlar və ya cədvəlin əhəmiyyəti yoxdur. Qaytarılan məlumatlar, prinsipcə, heç bir şəkildə istifadə edilmir. Beləliklə, məlumat ötürülməsi zamanı trafiki sıxışdırmaq üçün aşağıda göstərildiyi kimi "1"dən istifadə etmək daha məntiqlidir:

ƏGƏR VARSA (Sysobjects.FROM 1 SEÇİN
WHERE adı = "Mənim Cədvəlim" VƏ növü = "U")

5. Səhvləri tutmaq üçün TRY-Catch istifadə edin: 2005-ci serverdən əvvəl, hər sorğudan sonra prosedurda çoxlu sayda səhv yoxlaması yazılırdı. Daha çox kod həmişə daha çox resurs və daha çox vaxt sərf edir. 2005-ci ildən etibarən SQL Server daha düzgün və daha düzgün görünür rahat yol bu problemin həlli yolları:

Cəhd edin
--kod
SINAYI SON EDİN
Tutmağa BAŞLAYIN
-- səhv tutma kodu
SON TUTMA

Nəticə
Əsasən, bu gün üçün əlimdə olan şey budur. Bir daha təkrar edirəm ki, burada yalnız öz təcrübəmdə istifadə etdiyim üsullar var və mən onların effektivliyinə zəmanət verə bilərəm.

P.S.
İlk yazım, qəti mühakimə etməyin.

SQL-də saxlanılan prosedurlar müxtəlif obyektlərdə saxlanıla bilən icra edilə bilən proqram moduludur. Başqa sözlə, SQL ifadələrini ehtiva edən bir obyektdir. Bu saxlanılan prosedurlar müştəridə icra oluna bilər tətbiq proqramları yaxşı performans əldə etmək üçün. Bu cür obyektlərin başqa skriptlərdən, hətta hansısa başqa bölmədən çağırılması da qeyri-adi deyil.

Giriş

Çoxları hesab edir ki, onlar müxtəlif prosedurlara bənzəyirlər (müvafiq olaraq, MS SQL istisna olmaqla). Bəlkə də bu doğrudur. Onların oxşar parametrləri var, oxşar dəyərlər yarada bilərlər. Üstəlik, bəzi hallarda təmasda olurlar. Məsələn, onlar DDL və DML verilənlər bazaları, həmçinin istifadəçi funksiyaları (kod adı UDF) ilə birləşdirilir.

Əslində, SQL-də saxlanılan prosedurlar onları oxşar proseslərdən fərqləndirən geniş üstünlüklərə malikdir. Təhlükəsizlik, proqramlaşdırma çevikliyi, məhsuldarlıq - bütün bunlar verilənlər bazası ilə işləyən daha çox istifadəçini cəlb edir. Prosedurların populyarlığının zirvəsi 2005-2010-cu illərdə Microsoft-dan SQL Server Management Studio adlı proqramın buraxıldığı vaxta təsadüf edir. Onun köməyi ilə verilənlər bazası ilə işləmək xeyli asanlaşdı, daha praktik və rahat oldu. İldən-ilə bu proqramçılar arasında populyarlıq qazanırdı. Bu gün bu, verilənlər bazası ilə “ünsiyyət quran” istifadəçilər üçün Excel ilə eyni səviyyəyə gələn tamamilə tanış bir proqramdır.

Prosedur çağırıldıqda, lazımsız proseslər və istifadəçi müdaxiləsi olmadan dərhal serverin özü tərəfindən işlənir. Bundan sonra hər hansı bir silmə, icra, dəyişdirmə həyata keçirə bilərsiniz. DDL operatoru bütün bunlara cavabdehdir, yalnız o, obyektlərin işlənməsi üçün ən mürəkkəb hərəkətləri yerinə yetirir. Üstəlik, bütün bunlar çox tez baş verir və server əslində yüklənmir. Bu sürət və performans istifadəçidən serverə və əksinə böyük miqdarda məlumatı çox tez ötürməyə imkan verir.

İnformasiya ilə işləməyin bu texnologiyasını həyata keçirmək üçün bir neçə proqramlaşdırma dili mövcuddur. Bunlara, məsələn, Oracle-dan PL / SQL, InterBase və Firebird sistemlərində PSQL, həmçinin klassik "Microsoft" Transact-SQL daxildir. Onların hamısı saxlanan prosedurları yaratmaq və icra etmək üçün nəzərdə tutulmuşdur ki, bu da böyük verilənlər bazası prosessorlarına öz alqoritmlərindən istifadə etməyə imkan verir. Bu, həm də ona görə lazımdır ki, belə məlumatları idarə edənlər bütün obyektləri üçüncü şəxslərin icazəsiz girişindən və müvafiq olaraq müəyyən məlumatların yaradılmasından, dəyişdirilməsindən və ya silinməsindən qoruya bilsinlər.

Məhsuldarlıq

Bu verilənlər bazası obyektləri müxtəlif üsullarla proqramlaşdırıla bilər. Bu, istifadəçilərə vaxt və səylərə qənaət edərək ən uyğun olan istifadə olunacaq metodun növünü seçməyə imkan verir. Bundan əlavə, prosedurun özü işlənir, bu da server və istifadəçi arasında mübadilə üçün sərf olunan böyük vaxtın qarşısını alır. Həmçinin, modul tamamilə istənilən vaxt yenidən proqramlaşdırıla və düzgün istiqamətdə dəyişdirilə bilər. SQL-də saxlanılan prosedurun işə salınma sürətini xüsusilə qeyd etmək lazımdır: bu proses ona bənzər digərlərindən daha sürətlidir, bu da onu rahat və çox yönlü edir.

Təhlükəsizlik

Bu tip informasiya emalı analoji proseslərdən onunla fərqlənir ki, o, artan təhlükəsizliyi təmin edir. Bu, digər istifadəçilərin prosedurlara girişinin tamamilə istisna edilə bilməsi ilə təmin edilir. Bu, inzibatçıya məlumatın ələ keçirilməsindən və ya verilənlər bazasına icazəsiz daxil olmaqdan qorxmadan onlarla müstəqil şəkildə əməliyyatlar aparmağa imkan verəcək.

Məlumat ötürülməsi

SQL saxlanan proseduru ilə müştəri tətbiqi arasındakı əlaqə parametrlərin və qaytarılan dəyərlərin istifadəsidir. Sonuncu məlumatı saxlanılan prosedura ötürməli deyil, lakin bu məlumat (əsasən istifadəçinin istəyi ilə) SQL üçün işlənir. Saxlanılan prosedur işini başa vurduqdan sonra məlumat paketlərini geri göndərir (lakin yenə isteğe bağlı olaraq) istifadə edərək onu çağıran proqrama. müxtəlif üsullar, onun köməyi ilə həm saxlanılan SQL proseduruna zəng, həm də geri qaytarma həyata keçirilə bilər, məsələn:

Çıxış növü parametrindən istifadə edərək məlumatların ötürülməsi;

Qaytarma bəyanatından istifadə edərək məlumatların ötürülməsi;

Seçilmiş ifadədən istifadə edərək məlumatların ötürülməsi.

İndi gəlin bu prosesin içəridən necə göründüyünü görək.

1. SQL-də EXEC saxlanan proseduru yaradın

MS SQL-də (Managment Studio) prosedur yarada bilərsiniz. Prosedur yaradıldıqdan sonra o, proqramlaşdırıla bilən verilənlər bazası qovşağında siyahıya alınacaq, burada yaradılma proseduru operator tərəfindən həyata keçirilir. SQL saxlanan prosedurları icra etmək üçün obyektin adını ehtiva edən EXEC prosesindən istifadə edir.

Prosedur yaradıldıqda əvvəlcə onun adı, sonra isə ona təyin edilmiş bir və ya bir neçə parametr görünür. Parametrlər isteğe bağlı ola bilər. Parametr(lər), yəni prosedurun gövdəsi yazıldıqdan sonra bəzi zəruri əməliyyatları yerinə yetirmək lazımdır.

Məsələ burasındadır ki, bədəndə lokal dəyişənlər ola bilər və bu dəyişənlər də prosedurlar üçün lokaldır. Başqa sözlə, onlar yalnız Microsoft SQL Server proseduru çərçivəsində nəzərdən keçirilə bilər. Bu halda saxlanılan prosedurlar yerli hesab olunur.

Beləliklə, prosedur yaratmaq üçün prosedurun adı və prosedurun gövdəsi kimi ən azı bir parametr lazımdır. Qeyd edək ki, bu halda əla seçim təsnifatlandırıcıda sxem adı ilə prosedur yaratmaq və icra etməkdir.

Prosedurun gövdəsi istənilən növ ola bilər, məsələn, cədvəl yaratmaq, bir və ya bir neçə cədvəl sətirini daxil etmək, verilənlər bazasının tipini və xarakterini təyin etmək və s. Bununla belə, prosedurun orqanı onda bəzi əməliyyatların icrasını məhdudlaşdırır. Mühüm məhdudiyyətlərdən bəziləri aşağıda verilmişdir:

Bədən hər hansı digər saxlanılan prosedur yaratmamalıdır;

Bədən obyekt haqqında yanlış təəssürat yaratmamalıdır;

Bədən heç bir tetikleyici yaratmamalıdır.

2. Prosedur gövdəsində dəyişənin təyin edilməsi

Dəyişənləri prosedurun gövdəsi üçün lokal edə bilərsiniz və sonra onlar yalnız prosedurun gövdəsində olacaqlar. Saxlanılan prosedur gövdəsinin əvvəlində dəyişənlərin yaradılması yaxşı təcrübədir. Lakin siz həmçinin dəyişənləri verilmiş obyektin gövdəsinin istənilən yerində təyin edə bilərsiniz.

Bəzən bir neçə dəyişənin eyni sətirdə qurulduğunu və hər bir dəyişən parametrinin vergüllə ayrıldığını görə bilərsiniz. Həmçinin qeyd edək ki, dəyişənə @ prefiksi qoyulur. Prosedur gövdəsində dəyişəni istədiyiniz yerdə təyin edə bilərsiniz. Məsələn, @NAME1 dəyişəni prosedur gövdəsinin sonuna doğru elan edilə bilər. Elan edilmiş dəyişənə dəyər təyin etmək üçün bir sıra fərdi məlumatlar istifadə olunur. Eyni sətirdə birdən çox dəyişənin elan edildiyi vəziyyətdən fərqli olaraq, bu vəziyyətdə yalnız bir fərdi məlumat dəsti istifadə olunur.

Çox vaxt istifadəçilər belə bir sual verirlər: "Prosedurun mətnində bir ifadədə birdən çox dəyəri necə təyin etmək olar?" Yaxşı. Sual maraqlıdır, amma bunu etmək düşündüyünüzdən qat-qat asandır. Cavab: "Var seçin = Dəyər" kimi cütlərlə. Bu cütləri vergüllə ayıraraq istifadə edə bilərsiniz.

Müxtəlif nümunələrdə insanlar sadə saxlanılan prosedurun yaradılmasını və onun icrasını göstərirlər. Bununla belə, prosedur elə parametrlər qəbul edə bilər ki, çağırış prosesi ona yaxın dəyərlərə malik olsun (lakin həmişə deyil). Əgər onlar uyğun gəlirsə, onda müvafiq proseslər bədən daxilində başlayır. Məsələn, zəng edəndən şəhər və bölgəni götürəcək və uyğun şəhər və bölgəyə neçə müəllifin aid olduğunu qaytaracaq bir prosedur yaratsanız. Prosedura bu müəllif sayını yerinə yetirmək üçün verilənlər bazası müəllif cədvəllərini, məsələn, Pubları sorğulayacaq. Bu verilənlər bazalarını əldə etmək üçün, məsələn, Google SQL skriptini SQL2005 səhifəsindən yükləyir.

Əvvəlki nümunədə prosedur iki parametr götürür, bunlardır Ingilis dilişərti olaraq @State və @City adlanacaq. Məlumat növü tətbiqdə müəyyən edilmiş tipə uyğundur. Prosedur orqanında daxili dəyişənlər var @TotalAuthors (ümumi müəlliflər) və bu dəyişən onların sayını göstərmək üçün istifadə olunur. Sonra hər şeyi sayan sorğu seçimi bölməsi gəlir. Nəhayət, hesablanmış dəyər çap bəyanatından istifadə edərək çıxış pəncərəsinə çap olunur.

SQL-də saxlanılan proseduru necə yerinə yetirmək olar

Proseduru yerinə yetirməyin iki yolu var. Birinci yol, parametrləri ötürməklə, prosedur adından sonra vergüllə ayrılmış siyahının necə icra olunduğunu göstərir. Tutaq ki, iki dəyərimiz var (əvvəlki nümunədə olduğu kimi). Bu dəyərlər @State və @City prosedur parametrləri dəyişənlərindən istifadə etməklə toplanır. Parametrlərin bu şəkildə keçməsində sifariş vacibdir. Bu üsul ordinal arqument passing adlanır. İkinci üsulda parametrlər artıq birbaşa təyin edilir, bu halda sifariş vacib deyil. Bu ikinci üsul adlandırılmış arqumentlərin ötürülməsi kimi tanınır.

Prosedur tipikdən bir qədər fərqli ola bilər. Hər şey əvvəlki nümunədəki kimidir, lakin burada parametrlər dəyişdirilir. Yəni əvvəlcə @City parametri, @State isə standart dəyərin yanında saxlanılır. Standart parametr adətən ayrıca vurğulanır. SQL-də saxlanılan prosedurlar sadəcə parametrlər kimi ötürülür. Bu halda, "UT" parametrinin standart "CA" dəyərini əvəz etməsi şərtilə. İkinci icrada @City parametri üçün yalnız bir arqument dəyəri ötürülür və @State parametri standart "CA" dəyərini alır. Təcrübəli proqramçılar bütün standart dəyişənlərin parametrlər siyahısının sonuna doğru yerləşdirilməsini məsləhət görürlər. Əks halda, icra mümkün deyil və sonra daha uzun və daha mürəkkəb olan adlı arqumentləri ötürməklə işləmək lazımdır.

4. SQL Serverdə Saxlanan Prosedurlar: Qayıdış Yolları

Saxlanılan prosedurda məlumat göndərməyin üç mühüm yolu var. Onlar aşağıda verilmişdir:

Saxlanılan prosedurun dəyərinin qaytarılması;

Saxlanılan prosedurların çıxış parametri;

Saxlanılan prosedurlardan birini seçin.

4.1 SQL-də saxlanan prosedurlardan dəyərlərin qaytarılması

Bu texnikada prosedur yerli dəyişənə qiymət təyin edir və onu qaytarır. Prosedura birbaşa sabit dəyəri də qaytara bilər. Aşağıdakı misalda biz qaytaran prosedur yaratdıq ümumi sayı müəlliflər. Bu proseduru əvvəlkilərlə müqayisə etsəniz, çap edilə bilən dəyərin əksinə olduğunu görə bilərsiniz.

İndi prosedurun necə yerinə yetirildiyini və onun qaytardığı dəyərin çapını görək. Prosedurun icrası dəyişənin təyin edilməsini və bütün bu prosesdən sonra həyata keçirilən çapı tələb edir. Nəzərə alın ki, çap ifadəsi əvəzinə siz Select @RetValue və həmçinin OutputValue kimi Select ifadəsindən istifadə edə bilərsiniz.

4.2 SQL Saxlanılan Prosedur Parametrindən Çıxış

Qayıdış dəyəri əvvəlki nümunədə gördüyümüz kimi tək dəyişəni qaytarmaq üçün istifadə edilə bilər. Çıxış parametrindən istifadə prosedura zəng edənə bir və ya daha çox dəyişən dəyər göndərməyə imkan verir. Çıxış parametri proseduru yaratarkən məhz bu açar sözü “Çıxış” ilə təyin olunur. Əgər parametr çıxış parametri kimi göstərilibsə, prosedur obyekti ona qiymət təyin etməlidir. Nümunələri aşağıda göstərilə bilən SQL-də saxlanılan prosedurlar daha sonra xülasə məlumatı ilə geri qaytarılır.

Bizim nümunəmizdə iki çıxış adı olacaq: @TotalAuthors və @TotalNoContract. Onlar parametrlər siyahısında göstərilir. Bu dəyişənlər prosedurun gövdəsi daxilində dəyərlər təyin edir. Çıxış parametrlərindən istifadə etdiyimiz zaman zəng edən şəxs prosedurun gövdəsi daxilində təyin edilmiş dəyəri görə bilər.

Həmçinin, əvvəlki skriptdə MS SQL Serverin çıxış parametrində müəyyən edilmiş prosedurları saxladığı dəyərləri görmək üçün iki dəyişən elan edilmişdir. Daha sonra prosedur "CA" parametrinin normal dəyərini verməklə həyata keçirilir. Aşağıdakı parametrlərçıxarılır və buna görə də elan edilmiş dəyişənlər müəyyən edilmiş qaydada ötürülür. Qeyd edək ki, dəyişənləri ötürərkən çıxış açar söz burada da verilir. Prosedur uğurla başa çatdıqdan sonra, çıxış parametrləri tərəfindən qaytarılan dəyərlər mesaj qutusunda göstərilir.

4.3 SQL-də saxlanılan prosedurlardan birinin seçilməsi

Bu texnika məlumat cədvəli (RecordSet) şəklində bir sıra dəyərləri çağıran saxlanılan prosedura qaytarmaq üçün istifadə olunur. Bu misalda @AuthID parametrləri ilə saxlanan SQL proseduru bu @AuthId parametrindən istifadə edərək qaytarılmış qeydləri süzərək Müəlliflər cədvəlini sorğulayır. Select ifadəsi saxlanılan prosedurun zəng edəninə nəyin qaytarılacağına qərar verir. Saxlanılan prosedur yerinə yetirildikdə, AuthId geri ötürülür. Burada belə bir prosedur həmişə yalnız bir qeydi qaytarır və ya heç birini qaytarmır. Lakin saxlanılan prosedurun birdən çox qeydin qaytarılması ilə bağlı heç bir məhdudiyyəti yoxdur. Hesablanmış dəyişənləri əhatə edən seçilmiş parametrlərdən istifadə edərək məlumatların qaytarılmasının çoxsaylı cəmi təmin etməklə baş verdiyi nümunələri görmək qeyri-adi deyil.

Nəhayət

Saxlanılan prosedur müştəri tətbiqi sayəsində lazımi dəyişənləri qaytaran və ya ötürən və təyin edən kifayət qədər ciddi bir proqram vahididir. Saxlanılan prosedurun özü serverdə işlədiyi üçün server və müştəri tətbiqi arasında böyük həcmdə məlumat mübadiləsinin qarşısını almaq olar (bəzi hesablamalar üçün). Bu yükü azaldır SQL server, bu, əlbəttə ki, sahiblərinin əlinə keçir. Alt növlərdən biri saxlanılan T SQL prosedurlarıdır, lakin onların öyrənilməsi təsirli verilənlər bazası yaradanlar üçün lazımdır. Saxlanılan prosedurları öyrənərkən faydalı ola biləcək çox sayda, hətta çox sayda nüans var, lakin bu, proqramlaşdırma ilə yaxından, o cümlədən peşəkarlıqla məşğul olmağı planlaşdıranlar üçün daha çox lazımdır.

Prosedur bəyannaməsi

PROSEDUR YARATIN [({IN|OUT|INOUT} [,…])]
[DİNAMİK NƏTİCƏ SET ]
BAŞLAYIN [ATOM]

SON

Açar sözlər
. IN (Giriş) – giriş parametri
. OUT (Output) – çıxış parametri
. INOUT - giriş və çıxış, həmçinin sahə (parametrlər yoxdur)
. DYNAMIC RESULT SET prosedurun prosedur qaytarıldıqdan sonra açıq qalacaq müəyyən sayda kursorları aça biləcəyini göstərir.

Qeydlər
Şəbəkə və stack sıxlığı səbəbindən saxlanılan prosedurlarda (ilk növbədə böyük rəqəmlər və simvol sətirləri) bir çox parametrlərdən istifadə etmək tövsiyə edilmir. Təcrübədə Transact-SQL, PL/SQL və Informix-in mövcud dialektləri həm parametr elanında, həm də istifadədə, dəyişən elanında və alt proqram çağırışında standartdan əhəmiyyətli dərəcədə uzaqlaşmalar göstərir. Microsoft saxlanan prosedurların keş ölçüsünü qiymətləndirmək üçün aşağıdakı təxmini hesablamadan istifadə etməyi tövsiyə edir:
=(maksimum eyni vaxtda istifadəçilər)*(ən böyük icra planının ölçüsü)*1.25. Səhifələrdə icra planının ölçüsünü təyin etmək aşağıdakı əmrdən istifadə edilə bilər: DBCC MEMUSAGE.

Prosedur çağırışı

Bir çox mövcud DBMS-lərdə saxlanılan prosedurlar aşağıdakı ifadədən istifadə edərək çağırılır:

PROSEDURU İCRA EDİN [(][)]

Qeyd: Saxlanılan prosedurlara zəng proqram daxilindən, digər saxlanılan prosedurdan və ya interaktiv şəkildə edilə bilər.

Prosedur bəyannaməsi nümunəsi

CREATE PROCEDURE Proc1 AS //prosedurun elan edilməsi
SEÇİLƏN SName ÜÇÜN Cur1 KURSOR ELAN EDİN, Şəhər FROM SalesPeople WHERE Reytinq>200 //kursoru elan edin
OPEN Cur1 // kursoru açın
FETCH NEXT FROM Cur1 //kursordan verilənləri oxuyun
WHILE @@Fetch_Status=0
BAŞLAYIN
Cur1-DƏN NÖVBƏTİ GƏLİN
SON
CLOSE Cur1 //kursoru bağlayın
Cur1
EXECUTE Proc1 //proseduru icra edin

Polimorfizm
Eyni sxemdə eyni adlı iki alt proqram yaradıla bilər, əgər iki alt proqramın parametrləri bir-birindən kifayət qədər fərqlidirsə, onları ayırd etmək olar. Eyni sxemdə eyni adlı iki rutini ayırd etmək üçün hər birinə alternativ və unikal ad (xüsusi ad) verilir. Alt proqram müəyyən edildikdə belə bir ad açıq şəkildə göstərilə bilər. Bir neçə eyni adla alt proqramları çağırarkən, istədiyiniz alt proqramın müəyyən edilməsi bir neçə addımda həyata keçirilir:
. Əvvəlcə göstərilən adla bütün prosedurlar müəyyən edilir və heç biri yoxdursa, göstərilən adla bütün funksiyalar müəyyən edilir.
. Əlavə təhlil üçün yalnız hansı alt proqramlar qalır verilmiş istifadəçi EXECUTE imtiyazına malikdir.
. Onlar üçün parametrlərinin sayı çağırış arqumentlərinin sayına uyğun gələnlər seçilir. Parametrlərin müəyyən edilmiş məlumat növləri və onların mövqeləri yoxlanılır.
. Əgər birdən çox alt proqram qalıbsa, daha qısa uyğun ada malik olanı seçilir.
Təcrübədə Oracle-da polimorfizm yalnız paketdə, DB@ - müxtəlif sxemlərdə elan edilmiş funksiyalar üçün dəstəklənir və Sybase və MS SQL Server-də həddindən artıq yükləmə qadağandır.

Prosedurların çıxarılması və dəyişdirilməsi
Proseduru silmək üçün aşağıdakı ifadə istifadə olunur:

Proseduru dəyişdirmək üçün ifadədən istifadə edin:

PROSEDURU DƏYİŞTİRİN [([{IN|OUT|INOUT}])]
BAŞLAYIN [ATOM]

SON

Prosedurları yerinə yetirmək üçün imtiyazlar

QRANT İCRA EDİN TO |İCTİMAİ [QRANT VARİANTİ İLƏ]

Sistem Prosedurları
Bir çox DBMS (o cümlədən SQL Server) öz məqsədləriniz üçün istifadə edə biləcəyiniz müəyyən daxili sistemdə saxlanılan prosedurlara malikdir.