structuri control transact sql
DESCRIPTION
BAZE DE DATE AVANSATE - SQL SERVER 2008TRANSCRIPT
Structuri de control al fluxului
1
IF expresie_logicaBloc_insctructiuni_SQL_1
[ELSEBloc_instructiuni_SQL_2]
Bloc_instructiuniBEGIN
instructiune_1instructiune_2….
END
Structuri alternative
2
Structuri repetitiveWHILE expresie_logica
Bloc_insctructiuni_SQL_1[BREAK]
Bloc_instructiuni_SQL_2[CONTINUE]
Bloc_instructiuni_SQL_3
Bloc_instructiuniBEGIN
instructiune_1instructiune_2….
END
-repeta un bloc de instructiuni atatatimp cat expresie_logica este TRUE-daca expresie_logica contine un SELECT, acesta se va scrie intre paranteze rotunde
BREAK – se realizeaza iesirea fortata din WHILECONTINUE – abandoneaza iteratia curenta, toate instructiunile de dupa CONTINUE fiind ignorate
3
Structuri repetitive. Exemplu
WHILE (SELECT AVG(PretCatalog) FROM Produs)<=(SELECT AVG(PretFacturare) FROM ProduseFacturate)
BEGINUPDATE 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) <15BEGIN
UPDATE ProdusSET PretCatalog = PretCatalog * 1.1
SELECT MAX(PretCatalog) FROM Produs
IF (SELECT MAX(PretCatalog) FROM Produs)>20BREAK
ELSECONTINUE
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
Command(s) completed successfully.
5
Structuri repetitive. Exemplu WHILE inclus intr-o procedura stocata
CREATE PROCEDURE ModificaPretCatalog@pCodProdus as bigint
ASWHILE (SELECT PretCatalog FROM Produs WHERE CodProdus=@pCodProdus)<=
(SELECT AVG(PretFacturare) FROM ProduseFacturate WHERE CodProdus=@pCodProdus)
BEGINUPDATE 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.
EXECUTE ModificaPretCatalog 20
Nota. Procedura stocata se va executa cu comada (20 este Codul produsului al caruipret de catalog se va majora:
6
WAITFORWAITFOR 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'SELECT * FROM Produs
WAITFOR TIME '22:48'EXECUTE ModificaPretCatalog 44
Fraza SQL se va executa pe un minut
Fraza SQL se va executa la ora 22:48
7