Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Structuri de control in PL/SQL

sql


Structuri de control īn PL/SQL

Secventa



Instructiunea de atribuire <var> := <expresie>

Instructiunea NULL

Selectia

Instructiunea IF.ENDIF

IF <cond1> THEN

<instructiuni1>

[ELSEIF <cond2> THEN

<instructiuni2>

[ELSEIF <cond3> THEN

<instructiuni3>

. ]

[ELSE

<instructiunin>]

END IF;

Iteratia

Iteratia simpla Instructiunea LOOP...ENDLOOP

LOOP

<instructiuni>

EXIT WHEN <cond>

[<instructiuni>]

END LOOP;

Iteratia conditionata anterior - Instructiunea WHILE...END LOOP

WHILE <cond>

LOOP

<instructiuni>

END LOOP;

Iteratia cu control - Instructiunea FOR...END LOOP

FOR <contor> IN [REVERSE] <lim_inf> ..<lim_sup>

LOOP

<instructiuni>

END LOOP;

4. Proceduri/Functii stocate

Pentru a parametriza un subprogram, acesta trebuie inclus īntr-o schema a bazei de date. Acest lucru este posibil cu ajutorul comenzii CREATE OR REPLACE PROCEDURE FUNCTION. Odata ce a fost compilat si stocat īn baza de date, subprogramul stocat poate fi accesat si apelat din toate aplicatiile si de catre toti utilizatorii conectati la baza de date respectiva.

Parametrii subprogramelor pot fi de intrare (IN), de iesire (OUT) sau de intrare-iesire (IN OUT). Cei de intrare se comporta ca niste constante pe durata executiei subprogramului, valorile lor nu pot fi modoficate īn interiorul acestuia. Parametrii de iesire, īn schimb, se comporta ca niste variabile pe durata executiei subprogramului. Īnainte de apelul subprogramului, un astfel de parametru se considera initializat cu valoarea NULL, īn interiorul acestuia urmānd a i se modifica valoarea, care īn final va fi transmisa mediului apelant. Ultimul tip de parametrii prezinta valori īnainte de executia subprogramul, ce se pot modifica īn interiorul acestuia si care apoi, modificati, sunt returnati mediului apelant.

Exemplu :

Se va formula o procedura pentru afisarea facturarilor dintr un anumit produs specificat prin codul sau

se va utiliza metoda DBMS_OUTPUT.PUT_LINE pentru afisarea unei linii text.

CREATE OR REPLACE PROCEDURE fact_prod (cod IN NUMBER) IS

v_data facturi.datfact%TYPE;

v_nr facturi.nrfact%TYPE;

v_lin liniifact.linie%TYPE;

v_cant liniifact.cantitate%TYPE;

v_pr liniifact.pretunit%TYPE;

v_d CHAR(8);

v_n CHAR(8);

v_l CHAR(2);

v_c CHAR(11);

v_p CHAR(11);

CURSOR c IS

SELECT datfact, facturi.nrfact, linie, cantitate, pretunit

FROM facturi.nrfact = liniifact.nrfact AND codpr = cod

ORDER BY datfact, facturi.nrfact, linie;

BEGIN

OPEN c;

FETCH c INTO v_data, v_nr, v_lin, v_cant, v_pr;

IF c%FOUND THEN

DBMS_OUTPUT.PUT_LINE ('Produsul ' TO_CHAR (cod);

WHILE c%FOUND

LOOP

v_d := TO_CHAR(v_data);

v_n := TO_CHAR(v_nr);

v_l := TO_CHAR(v_lin);

v_c := TO_CHAR(v_cant);

v_p := TO_CHAR(v_pr);

DBMS_OUTPUT.PUT_LINE(v_d v_n v_l v_c v_p);

FETCH c INTO v_data, v_nr, v_lin, v_cant, v_pr;

END LOOP;

ELSE

DBMS_OUTPUT.PUT_LINE('Nu exista facturari !!!');

END IF;

CLOSE c;

END;

Lansarea īn executie a procedurii

SQL> SET SERVEROUTPUT ON;

EXECUTE fact_prod(102);

5. Pachete stocate

Un pachet Oracle permite gruparea mai multor obiecte PL/SQL (constante, variabile, cursoare, functii, proceduri si exceptii) īntr-un tot unitar. Pachetele sunt formate din doua parti :

specificatia : realizeaza interfata pachetului cu aplicatia; aici se declara obiectele publice;

corpul pachetului : contine detalii de implementare precum si declaratiile care nu pot fi vazute īn afara pachetului ; totodata sunt definite complet cursoarele, procedurile si functiile trecute īn specificatia pachetului.

Exemplu :

Se va defini un pachet stocat op_pachet ce va contine un obiect public - procedura afis_fact. Acestea apeleaza functia gasit_fact pentru a verifica existenta facturii specificate prin numarul ei.

CREATE OR REPLACE PACKAGE op_fact IS

PROCEDURE afis_fact (nr2 IN NUMBER);

END;

CREATE OR REPLACE PACKAGE BODY op_fact IS

v_nrfact facturi.nrfact%TYPE;

v_codcl facturi.codcl%TYPE;

FUNCTION gasit_fact (nr1 IN NUMBER) RETURN BOOLEAN IS

v_gasit boolean := FALSE;

BEGIN

SELECT nrfact, codcl INTO v_nrfact,v_codcl FROM facturi

WHERE nrfact = nr1;

v_gasit := TRUE;

RETURN v_gasit;

EXCEPTION

WHEN no_data_found THEN

RETURN v_gasit;

END;

PROCEDURE afis_fact (nr2 IN NUMBER) IS

v_linie liniifact.linie%TYPE;

v_cant liniifact.cantitate%TYPE;

v_pret liniifact.pretunit%TYPE;

v_l CHAR(6);

v_c CHAR(10);

v_p CHAR(10);

CURSOR c1 IS

SELECT linie, cantitate, pretunit FROM liniifact

WHERE nrfact = nr2;

BEGIN

IF gasit_fact(nr2) THEN

DBMS_OUTPUT.PUT_LINE ('Factura: '||nr2);

DBMS_OUTPUT.PUT_LINE ('Client : '||v_codcl);

DBMS_OUTPUT.PUT_LINE ('Linia'||' '||'Cantitate'|| ' '||'Pret');

OPEN c1;

LOOP

FETCH c1 INTO v_linie,v_cant,v_pret;

EXIT WHEN c1%NOTFOUND;

v_l: = TO_CHAR(v_linie);

v_c: = TO_CHAR(v_cant);

v_p: = TO_CHAR(v_pret);

DBMS_OUTPUT.PUT_LINE (v_l||' '||v_c||' '||v_p);

END LOOP;

CLOSE c1;

ELSE

DBMS_OUTPUT.PUT_LINE ('Factura inexistenta !!!');

END IF;

END;

END;


Document Info


Accesari: 2071
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )