Sunteți pe pagina 1din 12

Facultatea de Cibernetic, Statistic i Informatic Economic SGBD Oracle seminarul 2

VARIABILE
1. eclarare i ini!iali"are

declararea variabilelor se realizeaz n zona declarativ (delimitat prin DECLARE) a blocului (sau sub-blocului); iniializarea se poate ace la declarare sau n zona de e!ecuie (ntre "E#$% &i E%D); variabilele vor i vizibile n restul blocului' respectiv &i n blocurile incluse n el' mai puin n sub-blocurile n care numele lor este rede init (ca n ma(oritatea limba(elor de pro)ramare structurate' semni icaia unui nume de init de utilizator ntr-un bloc*sub-bloc este dat de cea mai apropiat declaraie anterioar locului olosirii); toate variabilele +L*,-L au un tip de dat' restricii &i un &ir valid de valori; declararea &i iniializarea se realizeaz ast el. nume#$ariabila %C&'S(A'() (I*# A(A %'&( '+LL) %,- . EFA+L( e/0resie)

constantele trebuie obli)atoriu iniializate' iar ulterior nu &i vor putea sc/imba valoarea; variabilele %01 %2LL trebuie obli)atoriu iniializate' iar ulterior nu vor putea primi valoarea %2LL; se olose&te urmtoarea convenie de notare. c#nume Constanta $#nume Variabila 1#nume Var2lobala (variabil )lobal de init n zona de speci icaii a pac/etului de pro)rame &i valabil pentru toate subpro)ramele pac/etului)3

3. (i0uri de $ariabile Variabile *L4S5L Scalare Com0o"ite Referin! L&B 6Lar1e &b7ects8, 'CL&B, CL&B, BL&B, BFILE &biect Variabile non9*L4S5L, $ariabile de mediu 6BI' VARIABLES) a8 Variabile Scalare, 1ipurile scalare conin valori simple (o variabila scalar poate conine la un moment dat o sin)ur valoare simpl) &i corespund n principal tipurilor pe care le pot avea coloanele tabelelor3 c:ar 6lun1#ma/8 9 lun1ime fi/ de ma/ ;3.<=< b>tes $arc:ar3 6lun1#ma/8 ? lun1ime $ariabil de ma/ ;3.<=< b>tes lon1 %ir de caractere de lun1ime $ariabil 32B) number 60reci"ie,scal8 boolean 6true, false, null8 date
4

Facultatea de Cibernetic, Statistic i Informatic Economic SGBD Oracle seminarul 2

E/em0le.

binar>#inte1er i 0ls#inte1er 6numere @ntre1i @ntre 931A<AB;=A< i 31A<AB;=A<8 binar>#float i binar>#double 60entru numere reale @n $arianta &racle 1C18 timestam0 60entru frac!iuni de secund8

v5 unctie varc/ar6(7); v5numar binar85inte)er.9:; v5totalsal number(7'6).9:; v5datainceput date.9s8sdate;<; c5ta!a constant number(='6).9>36?; v5valid boolean not null.9true; Afiarea variabilelor PL/SQL se realizeaz prin intermediul unciei +215L$%E din pac/etului BDS#&+(*+(3 ,e poate utiliza operatorul de concatenare ( @@ ) pentru a a i&a mai multe mesa(e sau variabile pe aceea&i linie3 BDS#&+(*+(.*+(#LI'E 6ABAL0AREA BAR$A"$LE$ E,1E.A @@$ariabila8E Popularea variabilelor cu valori din tabelele bazei de date ,e utilizeaz comanda ,ELEC1 cu clauza $%10 pentru popularea variabilelor +L*,-L cu valori ale atributelor din tabele; cererile ,ELEC1 din cadrul blocurilor +L*,-L trebuie s urnizeze o sin)ur linie rezultat (n caz contrar se semnaleaz eroare)3 E!emplu. --se a iseaza numele an)a(atului cu codul 4:: ,E1 ,ERBER021+21 0% DECLARE v5nume BARCCAR6(6:); "E#$% ,ELEC1 nume $%10 v5nume DR0E an)a(ati FCERE id5an)a(at 9 4::; D"E,5021+213+215L$%E(A%2EELE A%#AGA12L2$ E,1E.A @@ v5nume); E%D; * ;. Atributul F(G*E Atribuie unei variabile tipul altei variabile sau tipul de date speci ic unei coloane din tabel3 Declararea unei variabile cu F(G*E. $ariabila sau $ariabila1 tabel.nume#coloanF(G*EE ti0#datE
6

Facultatea de Cibernetic, Statistic i Informatic Economic SGBD Oracle seminarul 2

$ariabila3 E/em0lu.

$ariabila1F(G*EE

--a iseaza numele si prenumele an)a(atului cu codul 4::3 DECLARE v5nume an)a(ati3numeH1I+E; v5prenume an)a(ati3prenumeH1I+E; "E#$% ,ELEC1 nume' prenume $%10 v5nume' v5prenume DR0E an)a(ati FCERE id5an)a(at 9 4::; D"E,5021+213+215L$%E(A%2EELE A%#AGA12L2$ E,1E.A @@ v5nume@@A A@@ v5prenume); E%D; * &bser$a!ie, Restricia %01 %2LL a unei coloane nu se aplic &i variabilei declarate prin olosirea atributului H1I+E3 A. Variabile de mediu sau $ariabile de le1tur ale a0lica!iilor 1a"d 6BI' VARIABLES8

sunt variabile de le)tur cu aplicaia n care ruleaz motorul +L*,-L; trebuie declarate n aplicaie (n mediul )azd) &i pot i accesate &i modi icate n cadrul blocurilor +L*,-L; dup terminarea e!ecuiei blocului +L*,-L' variabila rmJne n mediul )azd cu valoarea primit n urma rulrii blocului (&i poate i pasat altui bloc' realizJnd ast el transmiterea de valori ntre blocurile +L*,-L); nu pot i utilizate n cadrul procedurilor' unciilor sau pac/etelor; se declar n a ara blocului +L*,-L cu a(utorul cuvJntului c/eie BAR$A"LE. VARIABLE 1#nume$ariabil (I* pentru declararea unei variabile /ost de tip %2E"ER nu se speci ic precizia &i scala; pentru utilizarea lor n cadrul unui bloc +L*,-L sau ntr-o raz ,-L din a ara blocului se pre i!eaz cu K,L ,:ost#$ariabila,-$#$ariabilaE

se a i&eaz n a ara blocului cu a(utorul comenzii +R$%1 (la a i&are variabila nu se va pre i!a cu K,L) *RI'( 1#nume$ariabil

E/em0le, 99se afiea" mesa7ul, Bloc *L4S5L BAR$A"LE )5mesa( varc/ar6(=:) "E#$% .)5mesa(.9A"loc +L*,-LA;
=

Facultatea de Cibernetic, Statistic i Informatic Economic SGBD Oracle seminarul 2

E%D; * +R$%1 )5mesa( SE( ,ERBER021+21 &' VARIABLE )5comenzi $arc:ar3(=:) BE2I' select count(M) into .)5comenzi from comenzi H:ere modalitate 9 AonlineA; E' ; * +R$%1 )5comenzi &bser$a!ie, ,e poate auto-a i&a variabila prin setarea A+(&*RI'( &' E/em0lu, --se selecteaza produsele si pretul acestora pentru acele produse care au pretul N pretul mediu al produsului cu codul =4== ara a utiliza un select imbricat ,E1 ,ERBER021+21 0% ,E1 A210+R$%1 0% BAR$A"LE )5pret number "E#$% select av)(pret) into .)5pret rom rand5comenzi O/ere id5produs 9 =4==; E%D; * select M rom rand5comenzi O/ere pretN .)5pret; I. Variabile de substitu!ie

de re)ul' variabilele de substituie sunt olosite pentru a transmite valori dinspre mediul ,-LM+lus spre comenzile ,-L sau blocurile +L*,-L' n timp ce variabilele de le)tur (bind variables) sunt olosite pentru a transmite valori n sens invers sau pentru a trans era valori ntre blocuri +L*,-L lansate succesiv (primul bloc seteaz variabila' urmtorul o consult); prin variabile de substituie se pot transmite valori comenzilor ,-L sau blocurilor +L*,-L lansate ( olosind PQP sau PQQP); se pot invoca din comenzile ,-L sau din blocurile +L*,-L prin PQnume5variabilaP sau PQQnume5variabilaP; sunt locale sesiunii ,-L n care au ost declarate; n mediul ,-L variabilele de substituie pot i u&or citite prin introducerea de valori de la tastatur (utilizJnd ACCE+1)' se pot de ini (cu DED$%E) sau a i&a pe ecran (cu +R0E+1);
R

Facultatea de Cibernetic, Statistic i Informatic Economic SGBD Oracle seminarul 2

E/em0le, --se a iseaza numarul de comenzi ale an)a(atului al carui cod este introdus de utilizator prin intermediul variabilei de substitutie Qid5an)a(at DECLARE v5nr5comenzi number(6); "E#$% select count(nr5comanda) into v5nr5comenzi rom comenzi O/ere id5an)a(at9Qid5an)a(at; dbms5output3put5line(AAn)a(atul are. A@@ v5nr5comenzi@@A comenziA); E%D; * &bser$a!ie, Sntr-un bloc +L*,-L se pot utiliza toate tipurile de variabile' respectJnd ns caracteristicile &i re)ulile de utilizare ale acestora3 Sn e!emplul urmtor se utilizaz atJt variabila de substituie s_nume de init &i iniializat prin comanda DED$%E' cJt &i variabila de le)tur g_salariul' dar &i variabila local v_prenume de acela&i tip cu coloana nume din tabela An)a(ati3 Bariabila de substituie de init cu DED$%E va i implicit de tipul CCAR. -- se a iseaza salariul si prenumele an)a(atului cu numele Abel ,E1 ,ERBER021+21 0% BAR$A"LE )5salariul number DED$%E s5nume9Abel DECLARE v5prenume an)a(ati3numeHt8pe; "E#$% select prenume'salariul into v5prenume' .)5salariul rom an)a(ati O/ere nume9AQs5numeA; D"E,5021+213+215L$%E (A+renumele an)a(atului este. A@@v5prenume); E%D; * print )5salariul EJERCIKII *R&*+SE S0ecifica!i ce se $a afia la rularea urmtorului bloc *L4S5L, DECLARE v5var4 %2E"ER .94::; v5var6 %2E"ER; v5var= %2E"ER .9 v5var6; v5varR BARCCAR(6:) .9 Avariabila +L*,-LA; v5var? %2E"ER %01 %2LL .9 v5var4; c5const4 C0%,1A%1 DA1E .9 105DA1E(A46*:6*6::<A'Add*mm*8888A); c5const6 C0%,1A%1 %2E"ER %01 %2LL .9 6; c5const= C0%,1A%1 %2E"ER .9 %2LL;
?

Facultatea de Cibernetic, Statistic i Informatic Economic SGBD Oracle seminarul 2

v5varT %2E"ER DEDA2L1 %2LL; "E#$% D"E,5021+213+215L$%E(Avariabila 4 9 A@@v5var4); D"E,5021+213+215L$%E(Avariabila 6 9 A@@v5var6); D"E,5021+213+215L$%E(Avariabila = 9 A@@v5var=); D"E,5021+213+215L$%E(Avariabila R 9 A@@v5varR); D"E,5021+213+215L$%E(Avariabila ? 9 A@@v5var?); D"E,5021+213+215L$%E(Aconstanta 4 9 A@@c5const4); D"E,5021+213+215L$%E(Aconstanta 6 9 A@@c5const6); D"E,5021+213+215L$%E(Aconstanta = 9 A@@c5const=); D"E,5021+213+215L$%E(Avariabila T 9 A@@v5varT); E%D; * S0ecifica!i ce se $a afia la rularea urmtorului bloc *L4S5L 6care con!ine blocuri imbricate, ilustrLnd domeniul de $i"ibilitate al unor $ariabile care au acelai nume8, DECLARE var %2E"ER; "E#$% var .9 4; D"E,5021+213+215L$%E(var); NNbloc4UU DECLARE var %2E"ER; "E#$% var .96; D"E,5021+213+215L$%E(var); E%D bloc4; D"E,5021+213+215L$%E(var); NNbloc6UU DECLARE var %2E"ER; "E#$% var .9=; D"E,5021+213+215L$%E(var); NNbloc=UU DECLARE var %2E"ER; "E#$% var .9R; D"E,5021+213+215L$%E(var); D"E,5021+213+215L$%E(bloc63var); E%D bloc=;
T

Facultatea de Cibernetic, Statistic i Informatic Economic SGBD Oracle seminarul 2

D"E,5021+213+215L$%E(var); E%D bloc6; D"E,5021+213+215L$%E(var); E%D; * S0ecifica!i ce se $a afia la rularea urmtorului bloc *L4S5L DECLARE stoc %2E"ER(=).9T::; mesa( BARCCAR6(?:).9A+rodusul 4:4A; "E#$% DECLARE stoc %2E"ER(=).94:; mesa( BARCCAR6(?:).9A+rodusul 4:6A; um BARCCAR6(4:).9 A bucati A; "E#$% stoc.9 stoc;4; mesa(.9A,tocul pentru A@@mesa(@@A este de. A@@stoc@@um; D"E,5021+213+215L$%E(mesa(); E%D; stoc.9 stoc;4::; mesa(.9A,tocul pentru A@@mesa(@@A este de. A@@stoc@@um; D"E,5021+213+215L$%E(mesa(); E%D; * S se calcule"e suma a dou numere, iar re"ultatul s se di$id cu ;. 'umerele se $or introduce de la tastatur3 BAR$A"LE )5rezultat number ACCE+1 p5num4 +R0E+1 A$ntroducei primul numr.A ACCE+1 p5num6 +R0E+1 A$ntroducei al doilea numr.A DECLARE v5num4 number(7'6).9Qp5num4; v5num6 number(7'6).9Qp5num6; "E#$% .)5rezultat.9(v5num4;v5num6)*=; E%D; * +R$%1 )5rezultat S se afie"e salariul mrit cu un 0rocent. Salariul i 0rocentul se dau de la tastatur ACCE+1 p5sal +R0E+1 A$ntroducei salariul.A ACCE+1 p5procent +R0E+1 A$ntroducei procentul.A
<

Facultatea de Cibernetic, Statistic i Informatic Economic SGBD Oracle seminarul 2

DECLARE v5sal number.9Qp5sal; v5procent number.9Qp5procent; "E#$% dbms5output3put5line(to5c/ar(nvl(v5sal':)M(4;nvl(v5procent':)*4::))); E%D; * (EDM, S se afie"e cota de (VA 0entru o anumit $aloare introdus de la tastatur.

I'(ERACKI+'EA C+ SERVER+L &RACLE *RI' C&DE'NI S5L

>

Facultatea de Cibernetic, Statistic i Informatic Economic SGBD Oracle seminarul 2

$nteraciunea se realizeaz prin intermediul comenzilor DDL (Data De inition Lan)ua)e)' DCL (Data Control Lna)ua)e)' DEL (Data Eanipulation Lan)ua)e)' 1+L (1ransaction +rocessin) Lan)ua)e) ast el. +L*,-L nu suport comenzi DDL sau DCL n cadrul unui bloc3 +entru e!ecutarea acestor comenzi se utilizeaza comanda EXEC !E "##E$"A!E% Comenzi DDL/DCL Executie CREA(E, AL(ER, R&* EJEC+(E IDDE IA(E 'CREATE TABLE.... ' 2RA'(, REV&OE +L*,-L suport toate comenzile din limba(ul de manipulare a datelor (DEL) &i din cel de control al tranzaciilor (1+L)3 2n bloc +L*,-L nu e o tranzacie3 Comenzile Commit/ &ollbac'/ Savepoint sunt independente de bloc dar pot s apar n interiorul su3 Comenzi DML/TPL Executie SELEC(, I'SER(, +* A(E, Se e/ecuta normal in cadrul blocului ELE(E, DER2E C&DDI(, R&LLBACO, SAVE*&I'( *ot a0are @n bloc dar au efect asu0ra tuturor tran"ac!iilor din interiorul i din afara acestuia. E/em0le. ,e creeaz tabela prod n cadrul unui bloc +L*,-L. ,E1 ,ERBER021+21 0% ((comenzi L$$ be)in --e!ecute immediate ADR0+ table prodA; e!ecute immediate ACREA1E table prod A, ,ELEC1 M DR0E produse O/ere 496A; end; * ,e adau) n tabela prod nre)istrri din tabela produse. ((comenzi L#$ --comenzi LED declare v5codp produse3id5produsHt8pe; v5denp produse3denumire5produsHt8pe; v5cat produse3cate)orieHt8pe; v5des produse3descriereHt8pe; be)in ,ELEC1 id5produs' denumire5produs' cate)orie' descriere $%10 v5codp' v5denp' v5cat' v5des DR0E produse O/ere id5produs9=4==; $%,ER1 $%10 prod (id5produs' denumire5produs' cate)orie' descriere) BAL2E, (v5codp' v5denp' v5cat' v5des); D"E,5021+213+215L$%E (A,-a adau)at in tabela prod produsul. A@@v5codp@@A A@@ v5denp@@A A@@v5cat); end;
7

Facultatea de Cibernetic, Statistic i Informatic Economic SGBD Oracle seminarul 2

* select M rom prod; +entru o mai mare le!ibilitate se poate declara o variabil de tip &ir de caractere care s primeasc comanda DDL care va i e!ecutat prin E)ecute "mmediate. E/em0le. ,e creeaz tabela emp5sal prin intermediul unei variabile de tip Barc/ar63 La creare' n tabela emp5sal se va adu)a o nou nre)istrare3 ,E1 ,ERBER021+21 0% BAR$A"LE #5E$D %2E"ER DECLARE B5,$R BARCCAR6(6::); "E#$% .#5E$D.944:; B5,$R.9ACREA1E table emp5sal A, ,ELEC1 id5an)a(at' nume' prenume' salariul DR0E an)a(ati O/ere id5an)a(at9A@@.#5E$D; D"E,5021+213+215L$%E (B5,$R); EVEC21E $EEED$A1E B5,$R; E%D; * select M rom emp5sal; ,e adau) o nou coloan ,10C n tabela produse. DECLARE B5,$R BARCCAR6(6::); "E#$% B5,$R.9AAL1ER 1A"LE +R0D2,E ADD (,10C %2E"ER (<))A; D"E,5021+213+215L$%E (B5,$R); EVEC21E $EEED$A1E B5,$R; E%D; * select M rom +R0D2,E; Eanipularea datelor in +L*,-L se ace prin instruciunile DEL ($%,ER1' 2+DA1E' DELE1E) care pot i lansate r restricii n +L*,-L3 E/em0le, Comanda I'SER( ,e adau) o nou nre)istrare n tabela emp5sal. "E#$% $%,ER1 $%10 emp5sal (id5an)a(at' nume' prenume' salariul) BAL2E, (6::' A+opA' AEarianA' <?::);
4:

Facultatea de Cibernetic, Statistic i Informatic Economic SGBD Oracle seminarul 2

E%D; * select M rom emp5sal; ,e adau) o nou nre)istrare n tabela produse prin introducerea valorilor cu a(utorul variabilelor de substituie. "E#$% $%,ER1 $%10 produse (id5produs' denumire5produs' cate)orie' stoc) BAL2E, (Qid' AQdenumireA' AQcate)orieA' Qstoc); E%D; * select M rom produse; Comanda +* A(E ,e mre&te cu un procent salariul an)a(ailor din tabela emp5sal care au n prezent salariul mai mic decJt o anumit valoare. DECLARE v5procent number.9:34; v5pra) an)a(ati3salariulHt8pe.94::::; "E#$% 2+DA1E emp5sal ,E1 salariul9salariulM(4;v5procent) FCERE salariulNv5pra); E%D; * select M rom emp5sal; ,e realizeaz o aprovizionare n cadrul depozitului prin care se mresc socurile tuturor produselor cu 4:: buci. "E#$% 2+DA1E produse ,E1 stoc9nvl(stoc':);4::; E%D; * select M rom produse; Sn urma comenzilor realizate de clieni' monitoarele de tipul LCD sunt vJndute' se deci scade din stocul e!istent un numr de monitoare introdus de la tastatur. "E#$% 2+DA1E produse ,E1 stoc9stoc-Qnr5buc5vandute FCERE loOer(denumire5produs) liWe Amonitor lcdHA; C0EE$1; E%D; * select M rom produse;
44

Facultatea de Cibernetic, Statistic i Informatic Economic SGBD Oracle seminarul 2

Aten!ieP Sn acest caz utilizarea comenzii C0EE$1 va inaliza atJt tranzacia curent cJt &i tranzaciile e!ecutate anterior3 Comanda ELE(E ,e &ter)e an)a(atul cu numele +op din tabela emp5sal. DECLARE "E#$% DELE1E DR0E emp5sal FCERE initcap(nume) liWe A+opHA; R0LL"ACX; E%D; * select M rom emp5sal; EJERCI(II *R&*+SE 43 Creai un bloc +L*,-L ce adau) un produs nou in tabela +R0D2,E3 a3 Dolosii ma!imul dintre codurile produselor si adu)ai 4: la aceasta valoare' olosind-o ca valoare pentru codul produsului nou introdus3 b3 Dolosii un parametru (variabila de substituie) pentru denumire' cate)oria &i stocul produsului3 c3 Lsai descrierea produsului %2LL3 d3 E!ecutai blocul3 63 Creai un bloc +L*,-L ce selecteaz stocul ma!im pentru produsele e!istente in tabela +R0D2,E3 1iprii rezultatul pe ecran3 =3 Creai un bloc +L*,-L care &ter)e un produs pe baza codului acestuia primit ca parametru (variabila de substituie)3 Anulai &ter)erea dintr-ul alt bloc +L*,-L3

46

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