Structuri de control al fluxului
1
Structuri alternative
IF expresie_logica
Bloc_insctructiuni_SQL_1
[ELSE
Bloc_instructiuni_SQL_2]
Bloc_instructiuni
BEGIN
instructiune_1
instructiune_2
….
END
2
Structuri repetitive
WHILE expresie_logica
Bloc_insctructiuni_SQL_1 -repeta un bloc de instructiuni atata
timp cat expresie_logica este TRUE
[BREAK]
-daca expresie_logica contine un SELECT,
Bloc_instructiuni_SQL_2 acesta se va scrie intre paranteze rotunde
[CONTINUE]
Bloc_instructiuni_SQL_3
BREAK – se realizeaza iesirea fortata din
WHILE
CONTINUE – abandoneaza iteratia curenta, toate
instructiunile de dupa CONTINUE fiind ignorate
Bloc_instructiuni
BEGIN
instructiune_1
instructiune_2
….
END
3
Structuri repetitive. Exemplu
WHILE (SELECT AVG(PretCatalog) FROM Produs)<=
(SELECT AVG(PretFacturare) FROM ProduseFacturate)
BEGIN
UPDATE Produs SET PretCatalog = PretCatalog *1.1
WHERE PretCatalog <(SELECT AVG(PretFacturare) FROM ProduseFacturate)
SELECT AVG(PretCatalog) as MediePretCatalog FROM Produs
SELECT AVG(PretFacturare) As MediePretFacturare FROM ProduseFacturate
END
Se majoreaza succesiv (la fiecare iteratie) cu cate 10 % fiecare pret de catalog de la produsele al caror pret de
catalog nu a depasit inca media generala a pretului de facturare. Majorarea se opreste in momentul in care media
preturilor de catalog depaseste media preturilor de facturare.
Nota. La fiecare iteratie se va afisa media preturilor de catalog (SELECT AVG(PretCatalog) as
MediePretCatalog FROM Produs ) si media preturilor de facturare (SELECT AVG(PretFacturare) As
MediePretFacturare FROM ProduseFacturate). Daca se incearca executia structurii si media preturilor de
catalog depaseste media preturilor de facturare va afisa doar Command(s) completed successfully. 4
Structuri repetitive. Exemplu
WHILE (SELECT AVG(PretCatalog) FROM Produs) <15
BEGIN
UPDATE Produs
SET PretCatalog = PretCatalog * 1.1
SELECT MAX(PretCatalog) FROM Produs
IF (SELECT MAX(PretCatalog) FROM Produs)>20
BREAK
ELSE
CONTINUE
END
In cazul in care media preturilor de catalog este sub 15 lei, se majoreaza succesiv (la fiecare iteratie) cu cate 10 %
fiecare pret de catalog (de la toate produsele), pana cand cel mai mare pret de catalog obtinut depaseste 20 lei. In
acest moment (BREAK) se iese din structura repetitiva.
Nota. La fiecare iteratie se va afisa pretul de catalog cel mai mare (SELECT MAX(PretCatalog) FROM Produs).
Daca se incearca executia structurii si media preturilor de catalog depaseste 15 se va afisa doar 5
Command(s) completed successfully.
Structuri repetitive. Exemplu WHILE inclus
intr-o procedura stocata
CREATE PROCEDURE ModificaPretCatalog
@pCodProdus as bigint
AS
WHILE (SELECT PretCatalog FROM Produs WHERE CodProdus=@pCodProdus)<=
(SELECT AVG(PretFacturare)
FROM ProduseFacturate WHERE CodProdus=@pCodProdus)
BEGIN
UPDATE Produs SET PretCatalog = PretCatalog *1.1
END
Procedura stocata va realiza cresterea succesiva cu cate 10% a pretului de catalog a unui produs precizat printr-un
parametru (@pCodProdus ) pana cand pretul de catalog va depasi media preturilor de facturare ale acestuia.
Nota. Procedura stocata se va executa cu comada (20 este Codul produsului al carui
pret de catalog se va majora:
EXECUTE ModificaPretCatalog 20
6
WAITFOR
WAITFOR DELAY ‘timp_asteptare’ | TIME ‘ora_executie’
Stabileste un timp de intarziere (timp_asteptare) pana la momentul lansarii in executie a unei fraze SQL sau
stabileste ora (ora_executie) la care se va lansa in executie o fraza SQL.
WAITFOR DELAY '00:01' Fraza SQL se va executa pe un minut
SELECT * FROM Produs
WAITFOR TIME '22:48' Fraza SQL se va executa la ora
EXECUTE ModificaPretCatalog 44 22:48