Procedură stocată

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 27 mai 2020; verificările necesită 5 modificări .

O  procedură stocată este  un obiect de bază de date , care este un set de instrucțiuni SQL care este compilat o dată și stocat pe server. Procedurile stocate sunt foarte asemănătoare cu procedurile obișnuite din limbile de nivel înalt , pot avea parametri de intrare și ieșire și variabile locale , pot efectua calcule numerice și operații pe date de caractere, ale căror rezultate pot fi atribuite variabilelor și parametrilor. Procedurile stocate pot efectua operațiuni standard de baze de date (atât DDL , cât și DML ). În plus, buclele și ramurile sunt posibile în procedurile stocate, adică pot folosi instrucțiuni pentru a controla procesul de execuție.

Procedurile stocate sunt similare cu funcțiile definite de utilizator (UDF). Principala diferență este că funcțiile definite de utilizator pot fi folosite ca orice altă expresie dintr-o interogare SQL, în timp ce procedurile stocate trebuie apelate folosind funcția CALL:

Procedura APEL ( ... )

sau

EXECUTARE procedura ( ... )

Procedurile stocate pot returna seturi de rezultate, adică rezultatele unei interogări SELECT. Astfel de seturi de rezultate pot fi procesate folosind cursoare, prin alte proceduri stocate care returnează un pointer de set de rezultate sau prin aplicații. Procedurile stocate pot conține, de asemenea, variabile declarate pentru manipularea datelor și cursoarelor, care vă permit să treceți peste mai multe rânduri dintr-un tabel. Standardul SQL oferă IF, LOOP, REPEAT, CASE și multe alte expresii cu care să lucrați. Procedurile stocate pot accepta variabile, pot returna rezultate sau pot modifica variabile și le pot returna, în funcție de locul în care este declarată variabila.

Implementarea procedurilor stocate variază de la un SGBD la altul. Majoritatea furnizorilor de baze de date le susțin într-o formă sau alta. În funcție de SGBD, procedurile stocate pot fi implementate în diferite limbaje de programare precum SQL, Java, C sau C++. Procedurile stocate care nu sunt scrise în SQL pot sau nu executa interogări SQL în sine. Utilizarea tot mai mare a procedurilor stocate a dus la apariția elementelor procedurale în limbajul SQL al standardelor SQL:1999 și SQL:2003 în partea SQL/PSM . Acest lucru a făcut din SQL un limbaj de programare imperativ . Majoritatea SGBD-urilor oferă propriile extensii proprii și de furnizor, pe lângă SQL/PSM.

Implementarea procedurilor stocate

Procedurile stocate sunt create de obicei folosind limbajul SQL și implementarea sa specifică în DBMS selectat . De exemplu, în aceste scopuri, SGBD-ul Microsoft SQL Server are limbajul Transact-SQL , Oracle  - PL/SQL , InterBase și Firebird  - PSQL , PostgreSQL  - PL/pgSQL , PL/Tcl , PL/Perl , PL/Python , IBM DB2  - SQL / PL , în Informix - SPL . MySQL urmează standardul SQL:2003 destul de îndeaproape , iar limbajul său este similar cu SQL/PL.

În unele SGBD, este posibil să se utilizeze proceduri stocate scrise în orice limbaj de programare capabil să creeze fișiere executabile independente, cum ar fi C++ sau Delphi . În terminologia Microsoft SQL Server, astfel de proceduri sunt numite proceduri stocate extinse și sunt pur și simplu funcții conținute într- un DLL Win32 . Și, de exemplu, în Interbase și Firebird pentru funcțiile numite din DLL / SO, este definit un alt nume - UDF (User Defined Function). MS SQL 2005 a introdus capacitatea de a scrie proceduri stocate în orice limbaj .NET , iar procedurile stocate extinse sunt planificate să fie abandonate în viitor. Oracle DBMS, la rândul său, permite scrierea procedurilor stocate în limbajul Java . [1] În IBM DB2, scrierea procedurilor și funcțiilor stocate în limbaje de programare convenționale este modalitatea tradițională, susținută de la început, iar extensia procedurală SQL a fost adăugată la acest DBMS abia destul de târziu, după ce a fost inclusă în standardul ANSI . Informix acceptă , de asemenea , proceduri Java și C. [2]

În Oracle DBMS , procedurile stocate pot fi combinate în așa-numitele pachete .  Pachetul constă din două părți - specificația ( eng. package specification ), care specifică definiția procedurii stocate și corpul ( eng. package body ), unde se află implementarea sa. Astfel, Oracle vă permite să separați interfața codului programului de implementarea acestuia.   

În IBM DB2, procedurile stocate pot fi combinate în .

În PostgreSQL , pe lângă procedurile stocate, este posibil să se creeze funcții care returnează tipul void .

Scopul și beneficiile procedurilor stocate [3]

Procedurile stocate îmbunătățesc performanța, îmbunătățesc opțiunile de programare și acceptă funcțiile de securitate a datelor.

În loc să stocheze o interogare utilizată frecvent, clienții se pot referi la procedura stocată corespunzătoare. Când o procedură stocată este apelată, conținutul acesteia este procesat imediat de server.

Pe lângă executarea efectivă a interogării, procedurile stocate vă permit, de asemenea, să efectuați calcule și să manipulați date - modificați, ștergeți, executați instrucțiuni DDL (nu în toate SGBD-urile!) și apelați alte proceduri stocate, efectuați o logică tranzacțională complexă. O singură instrucțiune vă permite să apelați un script complex care este conținut într-o procedură stocată, ceea ce evită trimiterea a sute de comenzi prin rețea și, în special, nevoia de a transfera cantități mari de date de la client la server.

În majoritatea SGBD-urilor, prima dată când este rulată o procedură stocată, aceasta este compilată (parsată și este generat un plan de acces la date). În viitor, procesarea acestuia este mai rapidă. Oracle DBMS interpretează codul procedural stocat stocat într-un dicționar de date . Începând cu Oracle 10g , este acceptată așa-numita compilare nativă (compilare nativă) a codului procedural stocat în C și apoi în codul mașină al mașinii țintă, după care, atunci când procedura stocată este apelată, codul său obiect compilat este direct executat.

Caracteristici de programare

Procedura stocată generată poate fi apelată în orice moment, ceea ce oferă modularitate și încurajează reutilizarea codului . Acesta din urmă facilitează întreținerea bazei de date, deoarece devine izolată de schimbarea regulilor de afaceri. Puteți modifica oricând o procedură stocată pentru a respecta noile reguli. După aceea, toate aplicațiile care îl folosesc vor respecta automat noile reguli de afaceri fără modificare directă.

Pentru a simplifica testarea, independența logicii de afaceri a aplicațiilor față de SGBD, există o abordare în care SGBD-ul acționează doar ca un depozit, cu un număr minim de proceduri stocate sau o respingere completă a acestora. În acest caz, se utilizează maparea entităților software de logica de afaceri la stocare. Vezi ORM (ing. Maparea obiect-relațională, rus. Maparea obiect-relațională)

Securitate

Utilizarea procedurilor stocate vă permite să limitați sau să excludeți complet accesul direct al utilizatorilor la tabelele bazei de date, lăsând utilizatorilor doar permisiuni de a executa proceduri stocate care oferă acces indirect și strict reglementat la date. În plus, unele SGBD acceptă criptarea textului (încheierea) a unei proceduri stocate.

Aceste caracteristici de securitate vă permit să izolați structura bazei de date de utilizator, ceea ce asigură integritatea și fiabilitatea bazei de date.

Acțiuni precum „ injectarea SQL ” sunt mai puțin probabile, deoarece procedurile stocate bine scrise validează suplimentar parametrii de intrare înainte de a trece interogarea către DBMS.

Note

  1. OracleJVM și  proceduri stocate Java . Oracle Inc.. - O secțiune a portalului Oracle dedicată tehnologiilor Java ca parte a serverului Oracle DBMS. Preluat la 6 iunie 2009. Arhivat din original la 21 august 2011.
  2. Ghidul dezvoltatorului J/Foundation  . IBM. — Secțiunea din documentația Informix privind dezvoltarea procedurilor stocate în limbajul Java. Consultat la 9 februarie 2011. Arhivat din original pe 10 februarie 2012.
  3. Proiectarea și implementarea bazelor de date Microsoft SQL Server. - M.-SPb.: Ediția rusă, Peter, 2005. - 512 p. — ISBN 5-7502-0089-2 , ISBN 5-469-00821-5 .

Link -uri