Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Sql


Index » educatie » » informatica » Sql
» Scrierea structurilor de control


Scrierea structurilor de control


Scrierea structurilor de control

Putem schimba fluxul logic al instructiunilor dintr-un bloc PL/SQL utilizand structurile de control IF si structurile de control ciclice. Sunt trei forme ale instructiunii IF:

IF-THEN-END IF

IF-THEN-ELSE-END IF



IF-THEN-ELSIF-END IF

Structura instructiuni IF in PL/SQL este similara cu structura instructiuni IF din alte limbaje procedurale.

IF condition THEN

statements;

[ELSIF condition THEN

statements;]

[ELSE

statements;]

END IF;

unde:

condition este o variabila booleana sau expresie (TRUE, FALSE sau NULL). Ea este asociata cu o secventa de instructiuni, ce sunt executate numai daca valoarea expresiei este TRUE.

statements    poate fi una sau mai multe instructiuni PL/SQL sau SQL.

ELSIF este un cuvant cheie care introduce o expresie booleana. Daca prima conditie este FALSE sau NULL atunci ELSIF introduce o conditie aditionala.

ELSE este un cuvant cheie care daca controlul ajunge la el, secventa instructiunilor ce ii urmeaza sunt executate.

Instructiunile IF incuibate pot fi realizate prin includerea dupa clauza ELSE a unei noi instructiuni IF astfel:

IF condition1 THEN

statement1;

ELSE

IF condition2 THEN

statement2;

END IF;

END IF;

Exemplu:

IF v_ename = 'KING' THEN

v_job := 'MANAGER';

ELSE

v_job := 'CLERK';

END IF;

Fluxul de executie al instructiuni IF-THEN-ELSIF:

Fig. 0

Exemplu:

IF :dept.deptno = 10 THEN

v_comm := 5000;

ELSEIF :dept.deptno = 20 THEN

v_comm := 7500;

ELSE

v_comm := 2000;

END IF;

.

Cand este posibil, putem folosi clauza ELSIF in schimbul instructiunilor IF incuibate, astfel incat codul este mai usor de citit si de inteles.

Exemplu:

IF condition1 THEN

statement1;

ELSIF condition2 THEN

statement2;

ELSIF condition3 THEN

statement3;

END IF;

Instructiunile ciclice

Instructiunile ciclice repeta o instructiune sau o secventa de instructiuni de mai multe ori. Exista trei instructiuni ciclice LOOP, FOR si WHILE.

Sintaxa instructiuni LOOP este:

LOOP

statement1;

.

EXIT [WHEN condition];

END LOOP;

unde:

condition este o variabila booleana sau o expresie (TRUE, FALSE sau NULL).

Putem termina o bucla LOOP folosind instructiunea EXIT, controlul trecand la urmatoarea instructiune dupa END LOOP. Putem atasa o clauza WHEN pentru a permite terminarea conditionata a instructiunii LOOP. Cand este intalnita instructiunea EXIT , conditia din clauza WHEN este evaluata. Daca conditia este TRUE bucla LOOP se termina si controlul este trecut la urmatoarea instructiune.

Exemplu:

DECLARE

v_ordid item.ordid%TYPE := 101;

v_counter NUMBER(2) := 1;

BEGIN

LOOP

INSERT INTO item(ordid, itemid)

VALUES(v_ordid, v_counter);

v_counter := v_counter + 1;

EXIT WHEN v_counter > 10;

END LOOP;

END;

Exemplul de mai sus insereaza 10 noi linii incepand cu numarul de ordine 101.

Instructiunea FOR are structura generala asemanatoare cu instructiunea fundamentala LOOP, doar ca are o variabila contor dupa FOR, care determina numarul iteratiilor facute. Sintaxa instructiunii FOR este:

FOR counter IN [REVERSE]

lower_bound .. upper_bound LOOP

statement1;

statement2;

.

END LOOP;

unde:

counter este o variabila contor a carei valoare se incrementeaza sau se decrementeaza (daca specificam REVERSE) cu 1 la fiecare iteratie a buclei pana cand e depasit intervalul.

REVERSE    cauzeaza decrementarea variabilei contor cu fiecare iteratie, de la valoarea superiora la valoarea inferioara.

lower_bound specifica marginea inferioara a intervalului.

upper_bound specifica marginea superioara a intervalului.

Exemplu:

DECLARE

v_lower NUMBER := 1;

v_upper NUMBER := 100;

BEGIN

FOR i IN v_lower .. v_upper LOOP

.

END LOOP;

END;

Instructiunea WHILE este folosita la repetarea unor secvente de instructiuni pana cand conditia logica nu mai are valoarea TRUE. Conditia este evaluata la inceputul fiecarei iteratii, daca conditia este FALSE inca de la inceputul buclei, atunci nu se executa nici o iteratie. Sintaxa instructiunii WHILE este:

WHILE condition LOOP

statement1;

statement2;

.

END LOOP;

unde:

condition este o variabila booleana sau o expresie (TRUE, FALSE sau NULL).

statement poate fi una sau mai multe instructiuni PL/SQL sau SQL.

Exemplu:

ACCEPT p_price PROMPT 'Introduceti pretul unui produs: '

ACCEPT p_itemtot PROMPT 'Introduceti pretul maxim de cumparare al unui produs '

DECLARE

v_qty NUMBER(8) := 1;

v_running_total NUMBER(7,2) := 0;

BEGIN

.

WHILE v_running_total < &p_itemtot LOOP

.

v_qty := v_qty + 1;

v_running_total := v_qty * &p_price;

END LOOP;

Putem incuiba bucle la nivele multiple. De asemenea, putem incuiba bucle FOR intr-o bucla WHILE si invers, iar buclele pot fi etichetate si se poate iesi din bucla cu declaratia EXIT. Numele etichetei urmeaza aceleasi reguli ca si identificatorii. O eticheta este plasata inaintea instructiuni fie pe aceeasi linie sau pe o linie separata. Ca de exemplu, plasarea ei inaintea cuvantului LOOP intre delimitatori (<<label>>). Daca bucla este etichetata, numele etichetei poate fi inclusa optional dupa declaratia END LOOP.

Exemplu:

.

BEGIN

<<Outer_loop>>

LOOP

v_counter := v_counter + 1;

EXIT WHEN v_counter > 10;

<<Inner_loop>>

LOOP

.

EXIT Outer_loop WHEN total_done = 'YES';

-- Leave both loops

EXIT WHEN iner_done = 'YES';

-- Leave inner loop only

END LOOP Inner_loop;

.

END LOOP Outer_loop;

END;





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate