Crearea unei proceduri stocate implică următoarele sarcini:
definirea tipului de procedură stocată care este creată: definită temporar sau definită de utilizator. În plus, vă puteți crea propria procedură stocată de sistem atribuindu-i un nume cu prefixul sp_ și plasându-l în baza de date a sistemului. Această procedură va fi disponibilă în contextul oricărei baze de date de pe serverul local;
· Planificarea drepturilor de acces. Atunci când creați o procedură stocată, trebuie să aveți în vedere că va avea aceleași drepturi de acces la obiectele bazei de date ca și utilizatorul care la creat;
· Definirea parametrilor procedurii memorate. Ca procedurile care fac parte din majoritatea limbajelor de programare, procedurile stocate pot avea parametri de intrare și ieșire;
· Elaborarea codului procedurii stocate. Codul procedurii poate conține o secvență de comenzi SQL, inclusiv apelarea altor proceduri stocate.
Creați o nouă procedură stocată și modificați-o folosind următoarea comandă:
Luați în considerare parametrii acestei comenzi.
Utilizând prefixele sp_, #, ##, procedura creată poate fi definită ca sistem sau temporară. Așa cum se poate observa din sintaxa comenzii, nu este permisă specificarea numelui proprietarului căruia îi va aparține procedura care urmează a fi creată, precum și numele bazei de date în care ar trebui să fie localizată. Astfel, pentru a plasa procedura stocată creată într-o bază de date particulară, trebuie să executați comanda CREATE PROCEDURE în contextul acestei baze de date. Când trimiteți din corpul unei proceduri stocate către obiecte din aceeași bază de date, puteți utiliza nume trunchiate, adică fără a specifica numele bazei de date. Când doriți să accesați obiecte aflate în alte baze de date, trebuie să specificați numele bazei de date.
Numărul din nume este numărul de identificare al procedurii stocate, care o identifică în mod unic în grupul de proceduri. Pentru facilitarea gestionării procedurilor, procedurile stocate în mod logic pot fi grupate prin atribuirea acelorași nume unor numere diferite, dar cu numere de identificare diferite.
Pentru a transfera datele de intrare și ieșire în procedura creată, pot fi utilizați parametrii ale căror nume, cum ar fi numele variabilelor locale, trebuie să înceapă cu simbolul @. Într-o procedură stocată, puteți specifica mai mulți parametri separați prin virgule. În corpul procedurii, variabilele locale ale căror nume coincid cu numele parametrilor acestei proceduri nu ar trebui utilizate.
Pentru a determina tipul de date pe care parametrul de procedură stocat corespunzător va avea, sunt potrivite toate tipurile de date SQL, inclusiv cele definite de utilizator. Cu toate acestea, tipul de date CURSOR poate fi utilizat numai ca parametru de ieșire al unei proceduri memorate, i. E. cu cuvântul cheie OUTPUT.
Prezența cuvântului cheie OUTPUT înseamnă că parametrul corespunzător este destinat să returneze datele din procedura stocată. Cu toate acestea, acest lucru nu înseamnă că parametrul nu este potrivit pentru trecerea valorilor la procedura stocată. Specificarea cuvântului cheie OUTPUT instruiește serverul, la ieșirea din procedura stocată, să atribuie valoarea curentă a parametrului variabilei locale care a fost specificată atunci când procedura a fost apelată ca valoare a parametrului. Rețineți că atunci când specificați cuvântul cheie OUTPUT, valoarea parametrului corespunzător la apelarea unei proceduri poate fi specificată numai cu ajutorul unei variabile locale. Nu este permisă utilizarea expresiilor sau constantelor valabile pentru parametrii normali.
Cuvântul cheie VARYING este utilizat împreună cu parametrul OUTPUT de tip CURSOR. Aceasta determină că parametrul de ieșire este setul de rezultate.
Cuvântul DEFAULT este valoarea pe care parametrul corespunzător o va asimila în mod implicit. Astfel, atunci când apelați o procedură, nu puteți specifica în mod explicit valoarea parametrului corespunzător.
Deoarece serverul stochează planul de executare a interogării și codul compilat, următorul apel la procedură va utiliza valorile pregătite. Cu toate acestea, în anumite cazuri, trebuie să recompilați codul procedurii. Specificarea cuvântului cheie RECOMPILE instruiește sistemul să creeze un plan pentru executarea procedurii memorate de fiecare dată când este apelat.
Parametrul FOR REPLICATION este solicitat atunci când replicați datele și includeți procedura stocată creată ca articol în publicație.
Cuvântul cheie AS este plasat la începutul corpului procedurii memorate în sine, adică set de comenzi SQL, cu ajutorul cărora se va implementa această acțiune sau acea acțiune. În corpul procedurii pot fi folosite aproape toate comenzile SQL, pot fi declarate tranzacțiile, setările de blocare și alte proceduri memorate. Puteți ieși din procedura stocată utilizând comanda RETURN.
Ștergerea unei proceduri stocate este efectuată de comanda:
PROCEDURA DE DROP [. n]
Executarea unei proceduri stocate
Pentru a executa o procedură memorată, utilizați comanda:
[[EXEC [UTE] nume de procedură [; număr]
[OUTPUT] | [DEFAULT]] [. n]
Dacă apelul la o procedură stocată nu este singura comandă din pachet, este necesară comanda EXECUTE. Mai mult, această comandă este necesară pentru a apela procedura din corpul unei alte proceduri sau declanșator.
Utilizarea cuvântului cheie OUTPUT la apelarea unei proceduri este permisă numai pentru parametrii care au fost declarați atunci când procedura a fost creată cu cuvântul cheie OUTPUT.
Când, atunci când se solicită o procedură pentru un parametru, este specificat cuvântul cheie DEFAULT, se va utiliza valoarea implicită. Firește, cuvântul specificat DEFAULT este permis numai pentru acei parametri pentru care valoarea implicită este definită.
Din sintaxa comenzii EXECUTE, puteți vedea că numele parametrilor pot fi omise atunci când apelați procedura. Totuși, în acest caz, utilizatorul trebuie să specifice valorile parametrilor în aceeași ordine în care au fost enumerați la crearea procedurii. Atribuiți o valoare parametrului în mod prestabilit, pur și simplu omițându-l când îl enumerați. Dacă doriți să omiteți parametrii pentru care este definită o valoare implicită, este suficient să specificați explicit numele parametrilor atunci când apelați o procedură memorată. În plus, în acest fel este posibilă listarea parametrilor și a valorilor acestora într-o ordine arbitrară.
Rețineți că atunci când apelați o procedură, specificați fie numele parametrilor cu valori, fie numai valorile fără un nume de parametru. Combinația lor nu este permisă.
Un exemplu. Procedură fără parametri. Elaborați o procedură pentru obținerea denumirilor și a valorii bunurilor achiziționate de Ivanov.
CREATE PROC my_proc1
AS Cost, Client
DE LA INNER JOIN Client
(Produsul INNER JOIN Transaction
3.3.2 Concept și tipuri de impact cascadă. Organizarea efectelor în cascadă
Pentru a preveni pierderea integrității referențiale, se utilizează un mecanism pentru a provoca modificări în cascadă. Aceasta constă în asigurarea următoarelor cerințe:
• Trebuie să dezactivați schimbarea câmpului de comunicare în înregistrarea tabelei copilului fără a modifica sincronizarea câmpurilor de comunicare în tabelele părinte și copil; de obicei, inițiativa de schimbare a câmpului de comunicare este implementată în înregistrarea tabelului părinte;
• când modificați câmpul de comunicare din înregistrare la tabelul părinte, schimbați sincronizând valorile câmpurilor de comunicare în înregistrările corespunzătoare ale tabelei copilului;
• Dacă ștergeți o intrare în tabelul părinte, trebuie să ștergeți intrările corespunzătoare din tabelul copil.
Modificările sau ștergerile din înregistrările tabelului copil atunci când se modifică înregistrarea tabelului părinte (șterse) se numesc modificări în cascadă și ștergeri în cascadă.
Notă 1. Există un alt tip de ștergere în cascadă: atunci când ștergeți o înregistrare părinte în înregistrările tabelelor copil, valorile câmpurilor de conectare sunt resetate. Această specie este rar utilizată.
Notă 2. De obicei, înregistrările sunt introduse în tabelul copil după cum urmează: se selectează valoarea înregistrării părinte (de exemplu, din lista derulantă), valoarea câmpului de comunicare este fixată și apoi introdusă automat în câmpurile de comunicare ale înregistrărilor copilului. Metoda, atunci când utilizatorul introduce manual valorile câmpurilor de comunicare în înregistrările copilului, este nepopulară: utilizatorul poate avea același înțeles, dar diferit în scris ("zahăr", "zahăr"). O practică mult mai puțin obișnuită este de a introduce înregistrările copilului fără a preciza valoarea domeniului de comunicare. Apoi, înregistrările tabelelor părinte și copil sunt "legate".
Modificările din cascadă pot fi blocate: fie modificând și ștergând simultan, fie modificând sau ștergând separat. Necesitatea de a activa sau de a dezactiva modificările în cascadă este de obicei implementată în DBMS atunci când se determină relațiile dintre tabele. De fapt, acesta este modul în care este creată integritatea legăturii. În mod normal, într-un DBMS, o cheie externă (a se vedea mai jos) este creată pentru a implementa integritatea referențială în tabelul copil, referindu-se la tabela parentală și indică tipul de efecte cascadă. Ulterior, DBMS-ul însuși, dacă este necesar, implementează efecte cascadă de acest tip pentru aceste tabele.
3.4 Sortarea, căutarea și filtrarea datelor în baze de date și eșantioane
3.4.1 Diferite metode de sortare, căutare și filtrare a datelor