Lucrare de curs BDC

January 26, 2017 | Author: Petru Voloceai | Category: N/A
Share Embed Donate


Short Description

Controlul explicit al cursoarelor...

Description

Ministerul Educaţiei al Republicii Moldova Universitatea Tehnică din Moldova FCIM Catedra Automatică şi Tehnologii Inormaţionale

!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 veriicat"

%ector superior #ulai Rodica

Chișinău -.)/

,

Cuprins: Introducere

3

1 Cursoare. Opera ții cu cursoare 1.1 Utilizarea cursoarelor 1.2 Crearea cursoarelor 1.3 Controlul explicit al cursorului - pașii  separati 1.3.1 Instrucți unea CURSOR 1.3.2 Instrucțiunea OP! 1.3.3 Instrucți unea #$C% 1.3.4 Instrucțiunea 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. Cicluri &OOP cursor 1.1/ Cicluri #OR cursor cu para+etri 1.11 Su)expresii select 0n ciclurile #OR

4 4 4 5 5 " " ' ' ' ,  1/ 1/ 11 12

2. xe+ple și concluzii 2.1 Ctea cuinte despre eicien ț 2.2 xe+ple co+entate 2.3 nc6iderea cursoarelor

13 13 14 15

Concluzii:

1'

7i)lio*raie:

1'

-

Introducere 1perațiile de regăsire din '2% uncționea$ă cu seturi de r3nduri cunoscute sub numele de seturi de re$ultate, R4ndurile returnate sunt toate r4ndurile care corespund criteriilor de căutare incluse 3ntr5o instrucțiune '2%6 3n număr de $ero sau mai multe, Folosind instrucțiuni 'E%ECT simple6 nu e&istă nici o modalitate de a regăsi primul r3nd6 r4ndul următor sau precedentele ). r3nduri, Aceasta este o parte integrantă a modului de uncționare a unui programde tip '7#!, Uneori6 este necesară deplasarea printre r3nduri 3nainte sau 3napoi6 cu unul sau mai multe r4nduri deodată, +entru aceasta se utili$ea$ă cursoarele, Un cursor este o interogare de ba$e de date stocată pe serverul '7#! ( nu o instrucțiune 'E%ECT6 ci setul de re$ultate regăsit de instrucțiunea respectivă, 1 dată cursorul stocat6 aplicațiile pot derula sau parcurge datele 3n sus ș i 3n 8os6 după necesități, !ieritele programe de tip '7#! acceptă dierite opțiuni și caracteristici ale cursoarelor, +rintre cele mai comune se numără" 5 capacitatea de a desemna un cursor ca iind de tip read5onl9 :numai pentru citire;6 astel 3nc4t datele să poată i citite6 dar nu ș i actuali$ate sau ș terse< 5 capacitatea de a controla operațiunile direcționale care pot i e&ecutate :3nainte6 3napoi6 primul6 ultimul6 po$iția absolută6 po$iția relativă etc,;< 5 capacitatea de a marca unele coloane ca iind editabile6 respectiv pe altele ca non5 editabile< 5 speciicarea domeniului de e&istenț ă6 pentru a avea posibilitatea de a pune cursorul la dispo$iția unei anumite cereri care l5a creat :o procedură stocată6 de e&emplu; sau a tuturor cererilor< 5 se poate indica programului '7#! să reali$e$e o copie a datelor regăsite :ș i nu indicarea spre datele reale din tabel; astel 3nc4t datele să nu se modiice 3ntre momentul deschiderii cursorului ș i momentul accesului la acesta, Cum se comportă programele de tip '7#! relațional ca programe de tip '7#! non5 relațional= Ca punct de reerință6 accesul și  navigarea printre r4nduri 3n acest mod repre$ină o comportare a ba$elor de date de tip I'AM :Inde&ed 'e>uential Acces Method ( metodă de acces secvențial inde&at;6 ca de e&emplu #trieve ș i d#A'E, Cusoarele repre$intă o parte interesantă a speciicației '2%6 3n sensul că pot determina o ba$ă de date relaț ională să se comporte ca o ba$ă de date I'AM, Cursoarele se olosesc cu precădere de către aplicațiile interactive6 3n cadrul cărora utili$atorul trebuie să se deplase$e 3n sus ș i 3n 8os cu unul sau mai multe ecrane de date6 navig4nd sau eectu4nd modiicări, Cursoarele nu sunt de prea mare a8utor 3n ca$ul aplicațiilor cu suport ?eb :A'+6 ColdFusion6 +@+ și '+6 de e&emplu;, Cursoarele sunt proiectate să persiste pe durata sesiunii dintre aplicațiile client și server6 dar acest model clientBserver nu5ș i are loc 3n lumea aplicațiilor  ?eb6 deoarece serverul de aplicație este clientul de ba$e de date6 nu utili$atorul inal, n consencință6 ma8oritatea de$voltatorilor de aplicații ?eb evită utili$area cursoarelor ș i re5creea$ă singuri această uncționalitate6 dacă este necesar, 0

1 Cursoare. Opera ții cu cursoare Cursoarele e&eplicite pot i utili$ate pentru a re$olva multiple e&trageri, Capitolul care urmea$ă va demonstra utilitatea cursoarelor6 va parcurge crearea unui cursor ș i  instrucțiunile respective,

1.1 Utilizarea cursoarelor Utili$area cursoarelor implică numeroase etape distincte" 5 nainte de a i utili$at6 un cursor trebuie declarat, Acest proces nu regăseș te propriu5 $is datele6 ci nu ace dec4t să deinească instrucțiunea 'E%ECT care va i utili$ată ș i eventualele opț iuni privind cursoarele< 5 1 dată declarat6 cursorul trebuie deschis 3n vederea utili$ării, Acest proces este cel care regăsește eectiv datele6 olosind instrucțiunea 'E%ECT deinită anterior< 5 Ulterior populării cursorului cu date6 pot i regăsite r4nduri individuale6 conorm necesităților < 5 C4nd nu mai este nevoie de el6 cursorul trebuie 3nchis ș i eventual eliberat :3n uncție de '7#!;, 1 dată declarat un cursor6 poate i deschis ș i  3nchis de oric4te ori este necesar, !upă deschiderea cursorului6 operațiile de regăsire se pot eectua cu recvenț a dorită,

1.2 Crearea cursoarelor Cursoarele se declară olosind instrucțiunea !EC%ARE6 care dieră de la un '7#! la altul, !EC%ARE denumește cursorul și   preia o instrucțiune 'E%ECT6 care poate conține ?@ERE și  alte clau$e6 conorm necesităților, +entru a demonstra aceasta6 com crea un cursor  care regăsește pe toți clienții ără adrese de email care lipsesc, Iată versiunea !#-6 '2% 'erver6 și '9base" DECLARE ClientCursor CURSOR FOR SELECT * FROM Clienti WHERE email_client IS NULL

Aceasta este versiunea 1racle ș i +ostgre'2%"

/

DECLARE CURSOR ClientCursor IS SELECT * FROM Clienti WHERE email_client IS NULL

n ambele versiuni6 instrucțiunea !EC%ARE este utili$ată la deinirea ș i  denumirea cursorului ( 3n acest ca$ Client5Cursor, Instrucțiunea 'E%ECT deinește un cursor care conține toți clienții ără adresă de email :o valoare U%%;,

1.3 Controlul explicit al cursorului - pașii  separati Cursorul e&plicit poate i controlat prin / tipuri separate de acțiuni"  DECLARE :numeste cursorul ș i deinește structura interogării care să ie eectuate cu el, %a acest nivel6 interogarea este parcursă dar nu este e&ecutată;< 1+E :e&ercută interogarea6 leg4nd orice variabilă care a ost reerențiată, %iniile 3ntoarse de interogare6 numita set5activ sunt acum disponibile pentru e&tragere;< FETC@ :memorea$a valorile din linia curentă 3n variabile, %inia curentă este linia la care cursorul pointea$ă, Fiecare FETC@ produce mutarea cursorului să indice la linia următoare 3n setul activ6 și deci iecare FETC@ va accesa o linie dierită returnată de interogare;< C%1'E :pornește un set de lucru de linii produse de 1+E5ul cursorului, Este posibil să re1+E :redeschideți; cursorul6 stabilind astel un set de lucru nou;,

1.3.1 Instrucți unea CURSOR  Este olosită pentru a declara un cursor e&plicit, +arametrii pot i deiniți pentru a permite substituția  valorilor in interogare c4nd cursorul este deschis, *ariabilele pot i deasemenea reerite 3n interogare6 dar trebuie sa ie declarate 3naintea instrucțiunii CUR'1R, 'inta&a" CURSOR ienti!icator"# $arameter etails%& IS 'uer() e$ression+

unde >uer95e&pression este o instrucțiune 'E%ECT care poate include ma8oritatea clau$elor6 dar nu o clau$a IT1, u trebuie deinit U%% ca un obiect 'E%ECT, E&emplu "

D

DECLARE CURSOR c, IS SELECT ename- sal- .ireate FROM em$ WHERE e$tno/ 01 AND 2o3/ 4ANAL5ST4+

1.3.2 Instrucțiunea OP! Este utili$ată 3n cadrul acțiunilor e&ecutabile dintr5un bloc6 ea stabileș te un set activ de r4nduri, 'inta&a" O6EN cursor)ienti! "#lista ar7umente%& +

E&emplu" O6EN c,+

Cursorul va pointa către primul r4nd 3n setul activ6 ca de e&emplu" 8 SCOTT 9111 ,:)2an);1 FORD 9111 19)ec) IF c,?ISO6EN THEN FETCH c, INTO =_ename- =_sal- =_.ireate + ELSE O6EN c,+ 0> LOO6 FETCH c, INTO =_ename- =_sal- =_.ireate + E@IT WHEN c,?ROWCOUNT 8,1 + END LOO6+

1.5 Controlul extra*erilor +ultiple din cursoare explicite In mod normal6 c3nd mai multe r4nduri s4nt prelucrate dintr5un cursor e&plicit6 un ciclu trebuie deinit pentru a e&ecuta FETC@ la iecare iterație, !acă acest proces continuă6 se vor   prelucra eventual toate r4ndurile active, C4nd un FETC@ eșuea$ă6 atributul J1TF1U! este TRUE6 și poate i testat, Totuși dacă după aceasta se eectuea$a un nou FETC@ apare o eroare " ORA),110 Fetc. out o! se'uence



Această eroare va termina blocul6 eventual cu o e&cepție netratată, Este deci important să se veriice succesul iecarui FETC@ 3nainte de alte reeriri la cursor :ie prin alte FETC@ sau comen$i '2%;, E&emplu" O6EN cursor_, + LOO6 FETCH cursor, INTO a-3-c- + E@IT WHEN cursor,?NOTFOUND + END LOO6+

1." Cursoarele si inre*istrarile Am vă$ut de8a că 3nregistrările pot i deinite sa se potrivească cu structura coloanelor  unui tabele, Este de asemenea posibil să deinim 3nregistrări ba$ate pe lista de coloane selectată e&plicit de cursor, Aceasta este convenabil pentru prelucrarea r3ndurilor din setul activ6 pentru ca să se poată e&trage direct 3n 3nregistrare6 ș i valorile r4ndului vor i 3ncarcate direct 3n c4mpurile corespun$atoare ale inregistrării, E&emplu" DECLARE CURSOR c, IS SELECT em$no- sal- .ireate- roBi FROM em$ WHERE e$tno / 01 AND 2o3 / ANAL5ST FOR U6DATE OF sal+ em$_recor c,?ROWT56E+ EIN O6EN c,+ FETCH c, INTO em$_recor+ IF em$_recor>sal 0111 THEN >>>

!e observat ca pseudo5coloana LroidL este validă ca articol selectabil ș i deci va avea un c4mp corespun$ator 3n 3nregistrarea LempNrecordL, E&emplul de mai sus arată deasemenea utili$area F1R U+!ATE 3ntr5o cerere cu cursor, Aceasta 3nseamna că r4ndurile 3ntoarse de cerere s4nt blocate e&clusiv c4nd instrucțiunea 1+E este e&ecutată, !eoarece blocările s4nt eliberate la sirș itul unei tran$acții6 nu trebuie sa e&ecutaț i C1MMIT 3ntre e&tragerile dintr5un cursor e&plicit dacă se oloseș te F1R U+!ATE,

K

1.' #olosirea clauzei %R CURR!$ O# C4nd ne reerim la r4ndul5curent dintr5un cursor e&plicit6 comen$ile '2% pot olosi ?@ERE CUR'1R 1F6 cu numele cursorului, Aceasta permite actuali$area sau ștergerea 3n  punctul 3n care ne alăm6 ără a i necesară olosirea e&plicită a Roid, Trebuie totuș i să includeți F1R U+!ATE 3n cererea cursorului6 astel 3nc4t r4ndurile să ie blocate la deschidere, E&emplu" FETCH c, INTO em$_recor + IF em$_recor>ename /  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 locația !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 NUMER/1 + non_sales NUMER / 1+ EIN 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 THEN U6DATE 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+

O

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 dierite cu iecare oca$ie, +arametrii s4nt deiniți 3n instrucțiunea CUR'1R astel" CURSOR ienti! # $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 reerire 3n cadrul e&presiei de cerere din cadrul cursorului ș i pot i tratate ca variabile +%B'2%, Următorul e&emplu arată numărul departamentului ș i tipul 8obului care sunt transmise 3ntr5o clau$a ?@ERE prin parametrii +aram) ș i +aram-" CURSOR c, # 6aram, NUMER6aram0 CHAR % IS SELECT ename- sal- .ireate FROM em$ WHERE e$tno / 6aram, AND 2o3 / 6aram0+

C4nd cursorul este ulterior deschis6 valorile sunt transmise pentru iecare din parametrii 3n mod po$ițional, *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 6LKSL

1. Cicluri &OOP cursor +%B'2% oeră un tip special de ciclu F1R pentru a prelucra r4ndurile 3ntoarse 3n cursorul e&plicit, ntr5un ciclu F1R cursor6 un cursor declarat este deschis6 se eectuea$a e&trageri ș i este inchis automat c4nd toate r4ndurile au ost prelucrate, Fiecare iterație a ciclului e&trage un r4nd din setul activ 3ntr5o 3nregistrare6 care este declarată implicit pentru utili$are 3n cadrul ciclului, Ciclul este terminat automat la sirș itul iterației pentru ultimul r4nd e&tras, Ciclurile F1R cu cursor sunt structurate astel"

).

DECLARE CURSOR cursor_name " #$arameters%& IS 'uer()e$resion+ EIN FOR recor)name IN cursor)name " #$arameters% & LOO6 ))$rocesare =alori in rinul curent> END LOO6+

nregistrarea numită 3n instrucțiunea F1R este declarată intern 3n ciclu ș i valabilitatea ei e&piră c4nd se termină ciclul, Fiecare iterație provoacă e&tragerea r4ndului următor 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 NUMER+ EIN 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 deinit cu parametrii6 valorile :parametrii actuali; sunt date 3n parante$ă6 după numele cursorului 3n instrucțiunea F1R, CURSOR c, #6aram, DATE % IS SELECT ename- 2o3 FROM em$ WHERE .ireate  6aram, + EIN FOR em$_recor IN c, #1,)AN);0% LOO6 )) =or !i acti=i an7a2atii e u$a ian;0 END LOO6+

))

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 deinite 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 cursoarelor  nu sunt disponibile pentru testare, n aară că este mai simplu de scris6 această metodă este ș i mult mai eicientă, E&emplu" FOr rec IN #SELECT ename FROM em$ WHERE e$tno / ,1 % LOO6 IF rec>ename / ONES THEN END LOO6+

)-

2. xe+ple și concluzii n capitolul ce urmea$ă vor i ăcute conclu$iile ș i pr e$entate c4teva e&emple,

2.1 Ctea cuinte despre eicien ț Toți  actorii care inluențea$a perormanța unui program '2% se aplică și la +%B'2%, Aceștia includ" 5 Inde&area coloanelor olosite 3n ?@ERE ș i 3n 8oin< 5 +rei&area coloanelor cu numele tabelei< 5 n 8oinurile inde&ate6 reerirea la tabela cea mai mică de la s4rș it, n plus6 +%B'2% mai oera uncționalitate care ace instrucțiunile '2% nenecesare, 5 u accesați ba$a de date dacă nu este necesar< 5 !acă toate datele de prelucrat sunt stocate 3n variabile6 atunci olosiți construcții +%B'2% ca atribuire sau IF, u olosiți 'E%ECT,,FR1M 'P',!UA% in mediul +%B'2%6 deoarece produce deschiderea unui cursor ș i transmiterea unor cereri către R!#M'< 5 Eectuați calcule 3n 'E%ECT6 dacă este posibil< 5 !acă aveți  de eectuat prelucrări este mult mai eicient să le eectuați atunci c4nd 'E%ECT5ați date și evitați instrucțiuni ulterioare care ar i necesare< 5 Cursoarele e&plicite vor permite evitarea unui FETC@ ulterior< 5 Atunci c4nd un singur r4nd este necesar6 cursoarele implicite e&ecută două e&trageri< 5 Un cursor e&plicit va permite sa eectuați o singura e&tragere< 5 Evitați treceri repetate prin tabele, +relucrarea procedurală permite un control puternic ș i le&ibil al r4ndurilor ba$ei de date6 dar trebuie să țineti cont că iecare I'ERT ș i U+!ATE provoacă re5scanarea tabelei, !acă  prelucrati mai multe r4nduri dintr5o tabela6 3ncercaț i să o aceți 3ntr5un singur pas, Considerati situația următoare, !orim să marim costul iecarui articol din tabel LitemsL6 pe r4nd6 p4na c4nd suma depașește D..., n primul e&emplu6 o scanare a tabelei este utili$ată de iecare dată pentru a recalcula totalul c4nd un articol este actuali$at" WHILE total  111 LOO6 FETCH item_cursor INTO ol_cost+ U6DATE items SET itemcost / itemcost *,>, WHERE CURRENT OF item_cursor+ SELECT SUM#itemcost% INTO total FROM items+ END LOO6+

1 atribuire ar putea evita L'E%ECT 'UML la iecare iterație6 calcul4nd c4t de mult totalul ar i aectat de ultima actuali$are" )0

WHILE total  111 LOO6 FETCH item_cursor INTO ol_cost+ U6DATE items SET itemcost / itemcost *,>, WHERE CURRENT OF item_cursor+ tottal / total  ol_cost *1>,+ END LOO6+

2.2 xe+ple co+entate +rimul e&emplu oloseș te sinta&a 1racle pentru a regăsi un singur r4nd din cursor :primul r4nd;" DECLARE T56E ClientCursor IS REF CURSOR RETURN Clienti?ROWT56E+ DECLARE ClientInre7istrare Clienti?ROWT56E EIN O6EN ClientCursor+ FETCH ClientCursor INTO ClientInre7istrare+ CLOSE ClientCursor+ END+

n acest e&emplu6 instrucțiunea FETC@ este utili$ată la regăsirea r4ndului curent :va  porni6 3n mod automat6 de la primul r4nd; 3ntr5o variabilă declarată6 numită ClientInregistrare, !atele regăsite nu sunt prelucrate 3n nici un mod, n e&emplul următor :care oloseș te din nou sinta&a 1racle;6 datele regăsite sunt parcurse ciclic6 de la primul r4nd la ultimul" DECLARE T56E ClientCursor IS REF CURSOR RETURN Clienti?ROWT56E+ DECLARE ClientInre7istrare Clienti?ROWT56E EIN O6EN ClientCursor+ LOO6 FETCH ClientCursor INTO ClientInre7istrare+ E@IT WHEN ClientCursor?NOTFOUND+ >>> END LOO6+ CLOSE ClientCursor+ END+

Ca și  3n e&emplul precedent6 acest e&emplu oloseș te  instrucțiunea FETC@ pentru a regăsi r4ndul curent 3ntr5o variabilă declarată6 numită ClientInregistrare, 'pre deosebire de e&emplul precedent6 aici instrucțiunea FETC@ se găsește 3n interiorul unui ciclu :%11+;6 astel )/

3nc4t se e&ecută 3n mod repetat, %inia de program EIT ?@E ClientCursorJ1TF1U! determină 3ncheierea prelucrării :inali$area ciclului; atunci c4nd nu mai e&istă alte r4nduri de  preluat, n acest e&emplu nu se e&ecută o prelucrare eectivă< 3ntr5un program autentic veț i 3nlocui caracterele ,,, cu propriile dumneavoastra linii de program, Iată un alt e&emplu6 care de data aceasta oloseș te sinta&a Microsot '2% 'erver" DECLARE i_client CHAR#,1%nume_client CHAR#1%aresa_client  CHAR#1%oras_client CHAR#1%stat_client CHAR#%co_$ostal_client  CHAR#,1%tara_client CHAR#1%contact_client CHAR#1%email_client CHAR#0%O6EN ClientCursor FETCH NE@T FROM ClientCursor INTO i_client- nume_client- aresa_client- oras_clientstat_client- co_$ostal_client- tara_client- contact_clientemail_client WHILE FETCH_STATUS / 1 EIN >>> FETCH NE@T FROM ClientCursor INTO i_client- nume_client- aresa_client- oras_clientstat_client- co_$ostal_client- tara_client- contact_clientemail_client END CLOSE ClientCursor

n acest e&emplu6 sunt declarate variabile pentru iecare dintre coloanele regăsite6 iar  instrucțiunile FETC@ regăsesc un r4nd ș i salvea$ă valorile 3n variabilele respective, 'e oloseș te un ciclu ?@I%E pentru a parcurge r4ndurile6 iar condiția ?@I%E S S F ETC@N'TA T U'  . determină 3ncheierea prelucrării :părăsirea ciclului; atunci c4nd nu mai sunt r4nduri de preluat, !in nou6 3n acest e&emplu nu se e&ecută prelucrări ale datelor< 3ntr5un program real veț i 3nlocui caracterele ,,, cu propriile dumneavoastră linii de program,

2.3 nc6iderea cursoarelor Așa cum s5a menționat și s5a vă$ut 3n e&emplele precedente6 cursoarele trebuie 3nchise după utili$are, !e asemenea6 unele programe de tip '7#! :precum '2% 'erver; impun ca resursele olosite de cursor să ie 3n mod e&plicit eliberate, Iată sinta&a olosită 3n !#6 1racle6 ș i +ostgre'2%"

CLOSE ClientCursor

Iată versiunea Microsot '2% 'erver " CLOSE ClientCursor DEALLOCATE CURSOR ClientCursor

Instrucțiunea C%1'E este olosită la 3nchiderea cursoarelor< odată 3nchis un cursor6 acesta nu mai poate i reolosit ără a i deschis din nou, Cu toate acestea6 un cursor nu trebuie să ie declarat din nou pentru a i olosit< o instrucțiune 1+E este suicientă,

Concluzii: Eectu4nd lucrarea de curs dată6 a ost ăcută o pre$entare a temei cursoarele, Astel a ost selectată inormația la temă și  structurată6 pre$ent4ndu5se e&emple 3n dierite '7#! precum 1racle sau Microsot '2% 'erver, Un cursor repre$intă o $onă de memorie 3n care se reţine o instrucţiune '2% anali$ată şi inormaţii utile procesării acesteia, 'istemul 1racle gestionea$ă 3n mod automat cursoarele, n de$voltarea unei aplicaţii6 un cursor constituie o resursă disponibilă care poate i utili$ată pentru anali$area sintactică şi semantică e&plicită a instrucţiunilor '2% 3ncapsulate 3n aplicaţie, E&ecuţia unui cursor plasea$ă re$ultatul cererii asociate 3ntr5o mulţime de linii :mulţime re$ultat;6 care pot i regăsite secvenţial sau nesecvenţial,

7i)lio*raie:

)V Sams teach yourself sql in 10 minutes. :-..;, Teora U'A %%C, -V Catedra de Calculatoare6 F, d, :-.)-6 aprilie .G;, ht tp://adisoftare. !" .ro. +reluat de  pe adisotare,

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF