Sunteți pe pagina 1din 7

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

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