Sunteți pe pagina 1din 8

Curs: Proceduri, Functii, View-uri

Reteta procedura

1. Începe prin a deschide un editor de text sau un client MySQL pentru a scrie codul
procedurii.
2. Asigură-te că ești conectat la baza de date corectă utilizând comanda USE
nume_baza_de_date;, înlocuind "nume_baza_de_date" cu numele bazei de date în care
dorești să creeze procedura.
3. Folosește declarația DELIMITER pentru a schimba delimitatorul implicit (;) cu un alt
caracter care nu este folosit în procedura ta. Acest lucru este necesar pentru a putea
include mai multe instrucțiuni în cadrul procedurii. De exemplu, poți utiliza DELIMITER
$$.
4. Scrie declarația pentru a crea procedura, specificând numele și lista de parametri. Un
exemplu ar fi:

CREATE PROCEDURE nume_procedura(parametru1 tip_parametru1, parametru2


tip_parametru2)
BEGIN
-- corpul procedurii
END $$

5. În interiorul corpului procedurii, poți declara variabilele folosind sintaxa DECLARE. De


exemplu:

DECLARE variabila1 tip_variabila1;


DECLARE variabila2 tip_variabila2;

6. Poți utiliza variabilele declarate în diferite instrucțiuni ale procedurii, cum ar fi atribuirea
de valori sau utilizarea acestora în interogări. De exemplu:

SET variabila1 = valoare;


SELECT * FROM tabela WHERE coloana = variabila2;

7. Pentru a trata erorile și a face rollback la tranzacție în caz de eroare, poți utiliza un bloc
de tratare a erorilor folosind sintaxa DECLARE ... HANDLER. Un exemplu ar fi:

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION


BEGIN
-- scrie în logurile de eroare
INSERT INTO log_eroare (mesaj) VALUES ('A apărut o eroare în procedură.');
-- rollback la tranzacție
ROLLBACK;
END;

1
8. După încheierea corpului procedurii, utilizează sintaxa $$ pentru a încheia procedura. De
exemplu:

END $$

9. Schimbă delimitatorul înapoi la ; folosind comanda DELIMITER ;.


10. Procedura este acum pregătită să fie executată. Poți utiliza comanda CALL pentru a apela
procedura și pentru a transmite argumentele necesare. De exemplu:

CALL nume_procedura(valoare_parametru1, valoare_parametru2);

Acestea sunt pașii de bază pentru a scrie o procedură în MySQL, care să includă variabile și
blocul de tratare a erorilor pentru a scrie în loguri și a face rollback la tranzacție.

DELIMITER $$

CREATE PROCEDURE nume_procedura(parametru1 tip_parametru1, parametru2


tip_parametru2)
BEGIN
DECLARE variabila1 tip_variabila1;
DECLARE variabila2 tip_variabila2;

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION


BEGIN
INSERT INTO log_eroare (mesaj) VALUES ('A apărut o eroare în
procedură.');
ROLLBACK;
END;

START TRANSACTION;

SET variabila1 = valoare;


SELECT * FROM tabela WHERE coloana = variabila2;

-- alte instrucțiuni aici

COMMIT;
END $$

DELIMITER ;

Asigură-te că înlocuiești "nume_procedura", "parametru1", "tip_parametru1", "parametru2",


"tip_parametru2", "variabila1", "tip_variabila1", "variabila2", "tip_variabila2", "valoare", "tabela" și
"coloana" cu valorile și numele corespunzătoare din aplicația sau scenariul tău specific.

CALL nume_procedura(valoare_parametru1, valoare_parametru2);

2
În MySQL, dacă nu există un bloc de captură a erorilor într-o procedură și apare o eroare în
cadrul unei tranzacții, tranzacția nu va fi automat anulată (rollback) în mod implicit.

Fără un bloc de tratare a erorilor adecvat, tranzacția va continua să ruleze până la finalizare.
Orice modificări efectuate în cadrul tranzacției, până în momentul în care a apărut eroarea, vor
rămâne permanente în baza de date.

Este important să ai grijă să incluzi un bloc de tratare a erorilor și să utilizezi instrucțiunea


ROLLBACK în cazul apariției unei erori pentru a anula efectele modificărilor din cadrul tranzacției.

De exemplu, poți adăuga un bloc de tratare a erorilor în procedură folosind sintaxa DECLARE ...
HANDLER după cum urmează:

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION


BEGIN
-- Acțiuni pentru tratarea erorilor aici
ROLLBACK; -- Anularea tranzacției în caz de eroare
END;

Acest bloc de tratare a erorilor va captura orice excepții de tip SQLEXCEPTION și va rula
acțiunile specificate în cadrul lui, inclusiv instrucțiunea ROLLBACK pentru a face rollback la
tranzacție în caz de eroare.

Este recomandat să utilizezi blocuri de tratare a erorilor și instrucțiuni de rollback pentru a


asigura consistența datelor și integritatea tranzacțiilor în procedurile MySQL.

Funcțiile suportă gestionarea excepțiilor (exception handlers), dar asta nu va prinde neapărat o
operațiune invalida. Acest lucru este suportat doar în procedurile stocate (stored procedures),
nu în funcții sau trigger-e.

Începând cu versiunea MySQL 8.0, funcțiile definite de utilizator în MySQL nu pot avea un bloc
de tratare a erorilor sau un mecanism de rollback similar procedurilor stocate.

Funcțiile în MySQL au un comportament diferit față de procedurile stocate. Ele sunt concepute
pentru a returna o valoare în funcție de parametrii de intrare și nu permit modificări ale datelor
din baza de date. Din acest motiv, blocurile de tratare a erorilor și rollback-urile nu sunt permise
în funcțiile MySQL.

În cazul în care întâmpini o eroare în cadrul unei funcții, aceasta va produce o excepție și va
întrerupe execuția funcției, returnând rezultatul erorii respective către apelatorul funcției.

Dacă ai nevoie de un mecanism de tratare a erorilor sau de rollback în contextul execuției


funcțiilor, poți utiliza instrucțiuni de tratare a erorilor și rollback în codul apelatorului funcției
sau în cadrul tranzacției care utilizează funcția.

3
În MySQL, funcțiile definite de utilizator pot fi utilizate pentru a efectua operații de citire
(SELECT) asupra datelor, dar nu pot fi utilizate pentru a efectua modificări ale datelor prin
instrucțiuni precum INSERT, UPDATE sau DELETE.

Funcțiile în MySQL sunt concepute pentru a returna o valoare și sunt utilizate în expresii,
interogări și alte operații de citire. Ele nu au permisiunea de a modifica datele din baza de date.

Dacă dorești să efectuezi operații de modificare a datelor (INSERT, UPDATE, DELETE), trebuie să
folosești proceduri stocate în loc de funcții. Procedurile stocate permit executarea acestor
instrucțiuni și pot fi utilizate pentru a modifica datele din baza de date.

Decizia de a utiliza funcții sau proceduri depinde de necesitățile și cerințele specifice ale
aplicației tale. Dacă trebuie să efectuezi modificări ale datelor, procedurile stocate ar fi mai
potrivite, în timp ce funcțiile sunt mai potrivite pentru operații de citire și calcul.

"Funcțiile (functions) și vizualizările (views) sunt două concepte diferite în MySQL și servesc
scopuri diferite:

Funcțiile:

 Funcțiile sunt obiecte de bază în MySQL, care acceptă un set de parametri și returnează
o valoare bazată pe acei parametri.
 Ele pot fi utilizate în expresii, interogări și alte operații de citire pentru a calcula și
returna valori.
 Funcțiile pot fi definite de utilizator (user-defined functions) sau pot fi funcții predefinite
(built-in functions) oferite de MySQL.
 Funcțiile definite de utilizator pot fi scrise în limbajul de programare procedural MySQL
(cum ar fi SQL sau SQL:2003) sau pot fi funcții definite într-un limbaj extern, cum ar fi
JavaScript sau C++.

Vizualizările:

 Vizualizările reprezintă reprezentări virtuale ale datelor existente într-o bază de date.
Acestea sunt rezultatele unei interogări salvate sub forma unui obiect în baza de date.
 O vizualizare este o interogare predefinită care poate fi tratată ca o tabelă virtuală,
permițând accesul ușor la datele relevante.
 Vizualizările sunt create prin definirea unei interogări SELECT și salvarea acelei interogări
sub forma unei vizualizări în baza de date.
 Atunci când accesezi o vizualizare, interogarea asociată cu vizualizarea este executată și
rezultatul este returnat ca o "tabelă virtuală" pentru interogările ulterioare.

4
În rezumat, funcțiile sunt utilizate pentru a calcula și returna valori bazate pe parametrii
furnizați, în timp ce vizualizările sunt utilizate pentru a crea o interfață simplificată și predefinită
pentru accesul la datele existente într-o bază de date."

Reteta functie

1. Scrierea unei funcții simple:

 În MySQL, poți crea o funcție definită de utilizator folosind sintaxa CREATE FUNCTION.
 Iată un exemplu de funcție simplă care adună două numere și returnează rezultatul:

CREATE FUNCTION aduna(a INT, b INT) RETURNS INT


BEGIN
DECLARE rezultat INT;
SET rezultat = a + b;
RETURN rezultat;
END;

 Această funcție se numește "aduna" și primește doi parametri de tip INT.


 În interiorul funcției, am declarat o variabilă numită "rezultat" și am atribuit suma
parametrilor "a" și "b" la aceasta.
 Apoi, am utilizat instrucțiunea RETURN pentru a returna valoarea "rezultat" ca rezultat al
funcției.
 Apelul funcției "aduna" (funcție simplă):

SELECT aduna(3, 5); -- Se apelează funcția aduna cu parametrii 3 și 5


-- Rezultatul va fi 8

2. Scrierea unei funcții cu mai mulți parametri:


o În MySQL, poți defini o funcție care acceptă mai mulți parametri, prin listarea lor
în declarația funcției.
o Iată un exemplu de funcție care calculează media aritmetică a unui număr variabil
de argumente:

CREATE FUNCTION media_aritmetica(...parametri) RETURNS DECIMAL(10,2)


BEGIN
DECLARE suma DECIMAL(10,2);
DECLARE numar_parametri INT;
DECLARE rezultat DECIMAL(10,2);

SET suma = 0;
SET numar_parametri = 0;

-- Iterăm prin toți parametrii și adunăm valorile

5
WHILE numar_parametri < ? DO
SET suma = suma + ?;
SET numar_parametri = numar_parametri + 1;
END WHILE;

-- Calculăm media
SET rezultat = suma / numar_parametri;

RETURN rezultat;
END;

 În exemplul de mai sus, am folosit "..." pentru a indica că funcția acceptă un număr
variabil de parametri.
 Am declarat variabilele necesare pentru a efectua calculele și am utilizat o buclă WHILE
pentru a itera prin toți parametrii și a aduna valorile în variabila "suma".
 La final, am împărțit suma la numărul de parametri pentru a calcula media aritmetică și
am returnat rezultatul.
 Apelul funcției "media_aritmetica" (funcție cu mai mulți parametri):

SELECT media_aritmetica(2, 4, 6, 8); -- Se apelează funcția media_aritmetica


cu parametrii 2, 4, 6 și 8
-- Rezultatul va fi 5.00, deoarece media aritmetică a acestor numere este 5.00

În ambele exemple, funcțiile sunt apelate utilizând sintaxa SELECT nume_funcție(parametri),


unde "nume_funcție" este numele funcției pe care ai definit-o și "parametri" sunt valorile
specifice pe care le furnizezi ca argumente în apelul funcției.

În linia de cod "CREATE FUNCTION media_aritmetica(...parametri) RETURNS DECIMAL(10,2)",


"..." reprezintă operatorul de "număr variabil de argumente" sau "ellipsis operator" în MySQL.

Operatorul "..." permite funcției să accepte un număr variabil de argumente. În acest caz,
folosirea "..." înseamnă că funcția "media_aritmetica" poate primi unul sau mai mulți
parametri, fără a specifica numărul exact de parametri în avans.

Atunci când folosești "..." în declarația funcției, trebuie să utilizezi un mecanism suplimentar
pentru a itera prin aceste argumente în interiorul corpului funcției, deoarece nu ai acces direct
la fiecare parametru individual. În exemplul anterior, am folosit o buclă "WHILE" pentru a itera
prin numărul variabil de parametri.

Astfel, operatorul "..." permite definirea funcțiilor care acceptă un număr flexibil de argumente
în MySQL, permițând astfel utilizarea funcției cu diferite numere de parametri în apelurile
ulterioare.

6
Reteta view-uri

Un view în MySQL este o interogare stocată sub formă de tabel virtual. Poți utiliza view-urile pentru a
extrage și a manipula datele din tabele existente, oferindu-ți astfel o modalitate mai simplă și mai
eficientă de a obține informațiile de care ai nevoie. Să trecem la structura componentelor codului pentru
a crea un view.

1. Scrierea unei vizualizări simple:


o În MySQL, poți crea o vizualizare folosind sintaxa CREATE VIEW.
o Iată un exemplu simplu de vizualizare care afișează toate rândurile unei tabele:

CREATE VIEW my_view AS


SELECT * FROM my_table;

 Această vizualizare se numește "my_view" și afișează toate rândurile din tabela


"my_table".
 În acest exemplu, vizualizarea va crea o interfață predefinită pentru a accesa și afișa
datele existente în "my_table".

2. Scrierea unei vizualizări cu calcule sau prelucrări de date:


o În MySQL, poți crea o vizualizare care implică calcule sau prelucrări ale datelor,
prin utilizarea expresiilor și funcțiilor disponibile în limbajul SQL.
o Iată un exemplu de vizualizare care calculează suma și media unui set de valori
dintr-o tabelă:

CREATE VIEW my_summary_view AS


SELECT SUM(value_column) AS total_sum, AVG(value_column) AS average
FROM my_table;

 Această vizualizare se numește "my_summary_view" și calculează suma totală și media


valorilor din coloana "value_column" din tabela "my_table".
 Rezultatul obținut prin această vizualizare va fi o singură linie care conține suma totală și
media valorilor.

Apelarea view-ului:

SELECT * FROM my_view;

Select * my_summary_view;

Această interogare va afișa rezultatele vizualizării, care vor fi similare cu conținutul tabelei pe
care ați bazat vizualizarea.

7
Vizualizările pot fi utilizate în interogări complexe, alături de alte tabele sau vizualizări, pentru a
obține rezultate dorite.

S-ar putea să vă placă și