Lucrare de curs BDC
-
Upload
petru-voloceai -
Category
Documents
-
view
216 -
download
0
Transcript of Lucrare de curs BDC
-
8/10/2019 Lucrare de curs BDC
1/17
Ministerul Educaiei al Republicii Moldova
Universitatea Tehnic din Moldova
FCIM
Catedra Automatic i Tehnologii Inormaionale
!isciplina" #a$e de date i Cuno tin e
%ucrare de curs
Tema" Controlul e&plicit al cursoarelor
A elaborat" 'tudent grupa" TI ( )))*oloceai +etru
A veriicat" %ector superior ,
#ulai Rodica
Chiinu -.)/
-
8/10/2019 Lucrare de curs BDC
2/17
-
Cuprins:
Introducere 3
1 Cursoare. Operaii cu cursoare 41.1 Utilizarea cursoarelor 41.2 Crearea cursoarelor 41.3 Controlul explicit al cursorului - pa ii separati 51.3.1 Instruc i unea CURSOR 51.3.2 Instruc iu nea OP! "1.3.3 Instruc i unea #$C% "1.3.4 Instruc iu nea C&OS '1.4 (tri)ute explicite pentru cursoare '1.5 Controlul extra*erilor +ultiple din cursoare explicite '1." Cursoarele si inre*istrarile ,
1.' #olosirea clauzei %R CURR!$ O# 1., Cursoare cu para+etri 1/1. Cicluri &OOP cursor 1/1.1/ Cicluri #OR cursor cu para+etri 111.11 Su)expresii select 0n ciclurile #OR 12
2. xe+ple i concluzii 132.1 Ctea cuinte despre eicien 132.2 xe+ple co+entate 142.3 nc6iderea cursoarelor 15
Concluzii: 1'
7i)lio*raie: 1'
-
8/10/2019 Lucrare de curs BDC
3/17
0
Introducere
1peraiile de regsire din '2% uncionea$ cu seturi de r3nduri cunoscute sub numele de
seturi de re$ultate, R4ndurile returnate sunt toate r4ndurile care corespund criteriilor de cutare
incluse 3ntr5o instruciune '2%6 3n numr de $ero sau mai multe, Folosind instruciuni 'E%ECT
simple6 nu e&ist nici o modalitate de a regsi primul r3nd6 r4ndul urmtor sau precedentele ).r3nduri, Aceasta este o parte integrant a modului de uncionare a unui programde tip '7#!,
Uneori6 este necesar deplasarea printre r3nduri 3nainte sau 3napoi6 cu unul sau mai multer4nduri deodat, +entru aceasta se utili$ea$ cursoarele, Un cursor este o interogare de ba$e de
date stocat pe serverul '7#! ( nu o instruciune 'E%ECT6 ci setul de re$ultate regsit de
instruciunea respectiv, 1 dat cursorul stocat6 aplicaiile pot derula sau parcurge datele 3n sus i
3n 8os6 dup necesiti,
!ieritele programe de tip '7#! accept dierite opiuni i caracteristici ale cursoarelor,
+rintre cele mai comune se numr"
5 capacitatea de a desemna un cursor ca iind de tip read5onl9 :numai pentru citire;6astel 3nc4t datele s poat i citite6 dar nu i actuali$ate sau t erseename / GIN THEN
DELETE FROM em$ WHERE CURRENT OF c,+
'a luam un e&emplu comlet, n blocul de mai 8os se prelucrea$a iecare r4nd din tabela
LdepL6 mut4nd departamentul 'A%E' 3n locaia !allas i celelalte departamente la e PorQ, !e
asemenea se ine un contor al departamentelor plasate 3n iecare loca ie,DECLARE
CURSOR c, IS
SELECT name- loc FROM e$t
FOR U6DATE OF loc +
e$t_rec c,?ROWT56E+
sales_count NUMER/1 +
non_sales NUMER / 1+
EIN
O6EN c,+
LOO6
FETCH c, INTO e$t_rec+
E@IT WHEN c,?NOTFOUND+
IF e$t_rec>name / SALES AND e$t_rec>loc / DALLAS
THEN
U6DATE e$t SET loc / DALLAS WHERE
CURRENT OF c,+
sales_count / sales_count ,+
ELSIF e$t_rec>name / SALES AND e$t_rec>loc / NEW
5ORG
THENU6DATE e$t SET loc / NEW 5ORG WHERE CURRENT OF c,+
non_sales / non_sales , +
END IF+
END LOO6+
CLOSE c,+
INSERT INTO counts #sales_set- non_sales_set %
JALUES #sales_count- non_sales%+
COMMIT+
END+
-
8/10/2019 Lucrare de curs BDC
10/17
).
1., Cursoare cu para+etri
+arametrii permit transmiterea unor valori unui cursor c4nd acesta este deschis i
utili$area 3n cererile care se e&ecut,
Aceasta 3nseamn c un cursor e&plicit poate i deschis de mai multe ori 3ntr5un bloc6
3ntorc4nd seturi de lucru dierite cu iecare oca$ie,+arametrii s4nt deini i 3n instruciunea CUR'1R astel"CURSOR ienti! # $aram)name ata)t($e- $aram)name ate)
t($e- >>> % IS 'uer()e$resion+
Tipurile parametrilor s4nt acelea i cu ale variabilelor scalare6 dar nu primesc dimensiune,
umele parametrilor sunt pentru reerire 3n cadrul e&presiei de cerere din cadrul cursorului i pot
i tratate ca variabile +%B'2%, Urmtorul e&emplu arat numrul departamentului i t ipul 8obului
care sunt transmise 3ntr5o clau$a ?@ERE prin parametrii +aram) i +aram-"
CURSOR c, # 6aram, NUMER-6aram0 CHAR % IS SELECT ename- sal- .ireate
FROM em$
WHERE e$tno / 6aram,
AND
2o3 / 6aram0+
C4nd cursorul este ulterior deschis6 valorile sunt transmise pentru iecare din parametrii
3n mod po$iional, *alorile din +%B'2% sau variabile host pot i utili$ate i deasemenea ca litere,
E&emplu"O6EN c, #91- ANAL5ST%+
O6EN c, #$l_num- CLERG%+
O6EN c, #,1- 2o3_t($e%+ )) 2o3_t($e este o =aria3ila 6LKSL
1. Cicluri &OOP cursor
+%B'2% oer un tip special de ciclu F1R pentru a prelucra r4ndurile 3ntoarse 3n cursorule&plicit, ntr5un ciclu F1R cursor6 un cursor declarat este deschis6 se eectuea$a e&trageri i esteinchis automat c4nd toate r4ndurile au ost prelucrate, Fiecare iteraie a ciclului e&trage un r4nddin setul activ 3ntr5o 3nregistrare6 care este declarat implicit pentru utili$are 3n cadrul ciclului,Ciclul este terminat automat la sir i tul iteraiei pentru ultimul r4nd e&tras,
Ciclurile F1R cu cursor sunt structurate astel"
-
8/10/2019 Lucrare de curs BDC
11/17
))
DECLARE
CURSOR cursor_name " #$arameters%& IS 'uer()e$resion+
EIN
FOR recor)name IN cursor)name " #$arameters% &
LOO6
))$rocesare =alori in rinul curent>END LOO6+
nregistrarea numit 3n instruciunea F1R este declarat intern 3n ciclu i valabilitatea ei
e&pir c4nd se termin ciclul, Fiecare iteraie provoac e&tragerea r4ndului urmtor din
3nregistrare, !eoarece cursorul este declarat e&plicit 3n bloc6 atributele sale sunt disponibile 3n
cadrul ciclului pentru testare6 dac este necesar,
E&emplu"DECLARE
CURSOR c, IS SELECT n,- n0- n9 FROM ata_ta3le+result NUMER+
EIN
FOR rec IN c, LOO6
result / rec>n0 K #rec>n, rec>n9%+
INSERT INTO tem$_ta3 JALUES #result%+
END LOO6+
COMMIT+
END+
1.1/ Cicluri #OR cursor cu para+etri
!ac cursorul pe care 3l procesa i 3ntr5un ciclu F1R cursor a ost deinit cu parametrii6
valorile :parametrii actuali; sunt date 3n parante$6 dup numele cursorului 3n instruciunea F1R,
CURSOR c, #6aram, DATE % IS
SELECT ename- 2o3 FROM em$
WHERE .ireate 6aram, +
EIN
FOR em$_recor IN c, #1,)AN);0%
LOO6
)) =or !i acti=i an7a2atii e u$a ian;0
END LOO6+
-
8/10/2019 Lucrare de curs BDC
12/17
)-
1.11 Su)expresii select 0n ciclurile #OR
Am v$ut c ciclurile F1R cu cursor sunt un mod convenabil de a prelucra r4nduri dintr5
un cursor e&plicit declarat 3n program, Ciclurile F1R pot i deasmenea utili$ate pentru a prelucra
cereri multi5r4nd6 care sunt deinite la inceputul ciclului, 'tructura este aratat mai 8os"FOR rec)name IN #'uer()e$resion%
LOO6
END LOO6+
E&presia cererii este considerat ca o sub5e&presie i este prelucrat 3ntr5un cursor care
este intern ciclului F1R, !eoarece cursoarele nu sunt declarate cu nume6 atributele cursoarelornu sunt disponibile pentru testare, n aar c este mai simplu de scris6 aceast metod este imult mai eicient,
E&emplu"FOr rec IN #SELECT ename FROM em$ WHERE e$tno / ,1 %
LOO6
IF rec>ename / ONES THEN
END LOO6+
-
8/10/2019 Lucrare de curs BDC
13/17
)0
2. xe+ple i concluzii
n capitolul ce urmea$ vor i cute conclu$iile i pr e$entate c4teva e&emple,
2.1 Ctea cuinte despre eicien
To i actorii care inluenea$a perorman a unui program '2% se aplic i la
+%B'2%, Ace t ia includ"
5 Inde&area coloanelor olosite 3n ?@ERE i 3n 8oin