Cursor

Trimis la data: 2010-06-28 Materia: Electronica Nivel: Facultate Pagini: 6 Nota: / 10 Downloads: 0
Autor: Adelina Miron Dimensiune: 17kb Voturi: Tipul fisierelor: doc Acorda si tu o nota acestui seminar: 1 2 3 4 5 6 7 8 9 10
vezi mai multe detalii vezi mai putine detalii
Raporteaza o eroare
Atunci cand se executa o comanda SQL, Oracle Server deschide o zona de memorie (context area) in care comanda este executata. Cursorul este un pointer catre aceasta zona.In PL/SQL se utilizeaza doua tipuri de cursoare:implicit: declarat pentru toate instructiunile PL/SQL de tip LMD (INSERT/UPDATE/DELETE);explicit: declarat si gestionat de programator.
Referate similare: Nu exista seminarii similare

CURSORUL IMPLICIT
-este declarat de PL/SQL implicit pentru toate comenzile de manipulare a datelor (INSERT, UPDATE, DELETE);
-daca o instructiune LMD nu afecteaza nici o linie a tabelei nu se genereaza eroare, insa exceptia trebuie tratata folosind atributele speciale ale cursorilor;
-atributele cursorului implicit:
-SQL%ROWCOUNT
-SQL%FOUND
-SQL%NOTFOUND

Exemplu
Se sterge un produs din tabela PRODUSE si se contorizeaza numarul de randuri sterse.
SET SERVEROUTPUT ON
DECLARE
v_rez NUMBER(2);
BEGIN
DELETE FROM produse
WHERE id_produs=111;
v_rez:=SQL%ROWCOUNT;
DBMS_OUTPUT.PUT_LINE (v_rez || ' randuri sterse');
COMMIT;
END;
/

Se incearca modificarea denumirii produsului cu codul 3, in cazul in care acest produs nu exista (comanda update nu realizeaza nici o modificare) va fi afisat un mesaj corespunzator.

BEGIN
UPDATE produse
SET denumire_produs='cafea'
WHERE id_produs=3;
IF SQL%NOTFOUND THEN
DBMS_OUTPUT.PUT_LINE('Nu exista produsul cu acest cod');
END IF;
END;
/

Se sterge din tabela EMP_SAL salariatul al carui ID este introdus de utilizator prin intermediul variabilei g_angid:
ACCEPT g_angid PROMPT 'Introduceti id-ul salariatului:'
VARIABLE nr_sters varchar2(100)
DECLARE
BEGIN
DELETE FROM emp_sal WHERE id_angajat=&g_angid;
:nr_sters:=TO_CHAR(SQL%ROWCOUNT)||' INREGISTRARI STERSE';
END;
/
PRINT nr_sters
Rollback;

CURSORUL EXPLICIT
-se foloseste pentru a procesa individual fiecare linie (inregistrare) returnata de o instructiune SELECT ce returneaza mai multe inregistrari.
-multimea inregistrarilor returnate de o instructiune SELECT este numita multime rezultat.
-cursorul pastreaza un pointer catre linia curenta in cadrul unei multimi rezultat.

Verificarea starii unui cursor explicit se realizeaza prin intermediul urmatoarelor atribute:nume_cursor%ISOPEN - evaluat la TRUE in cazul in care cursorul este deschis;nume_cursor %NOTFOUND - evaluat la TRUE in cazul in care cel mai recent FETCH nu a returnat nici o linie;nume_cursor %FOUND - complementul lui %NOTFOUND;nume_cursor %ROWCOUNT - are ca valoare numarul liniilor returnate pana in momentul curent.

Prelucrarea cursorului explicit presupune parcurgerea urmatoarelor etape:
1)se declara variabilele in care vor fi incarcate valorile corespunzatoare unei linii din cursor;
2)se declara cursorul explicit, specificandu-se un nume pentru acesta si definindu-se interogarea de procesat in cadrul lui:

DECLARE nume_cursor IS SELECT........................;
3)se deschide cursorul prin intermediul instructiunii OPEN, care executa interogarea si legarea tuturor variabilelor referite. Inregistrarile returnate de interogare sunt desemnate drept set activ de date, care pot fi de acum incarcate.

OPEN nume_cursor;
4)utilizandu-se instructiunea FETCH, se incarca linia curenta din cursor in variabile. Fiecare incarcare determina mutarea pointerului cursorului la linia urmatoare din setul activ de date.
FETCH nume_cursor INTO var1, var2,..............;
5)este inchis cursorul prin instructiunea CLOSE, care dezafecteaza setul activ de linii. Cursorul poate fi din nou deschis pentru a stabili un nou set activ de linii.CLOSE nume_cursor;

Pentru a procesa liniile unui cursor explicit se defineste de obicei o bucla pentru executarea unui FETCH in fiecare iteratie. In final, toate liniile din setul activ sunt procesate si un FETCH executat fara succes pozitioneaza atributul %NOTFOUND pe TRUE.Inaintea primului FETCH, %NOTFOUND se evalueaza la NULL, ca si in cazul in care FETCH nu se executa niciodata cu succes.

Stiri
  • pag. 1
  • pag. 2
  • pag. 3
  • pag. 4
  • pag. 5
  • pag. 6

Nota explicativa
Referatele si lucrarile oferite de Referate.ro au scop educativ si orientativ pentru cercetare academica.

Iti recomandam ca referatele pe care le downloadezi de pe site sa le utilizezi doar ca sursa de inspiratie sau ca resurse educationale pentru conceperea unui referat nou, propriu si original.

Referat.ro te invata cum sa faci o lucrare de nota 10!
Linkuri utile
Programeaza-te online la salonul favorit Descarca gratuit aplicatiile pentru iOS si Android Materiale educative Jocuri Cele mai tari jocuri de pe net Referate scoala Resurse, lucrari, referate materiale pentru lucrari de nota 10
Toate imaginile, textele sau alte materiale prezentate pe site sunt proprietatea referat.ro fiind interzisa reproducerea integrala sau partiala a continutului acestui site pe alte siteuri sau in orice alta forma fara acordul scris al referat.ro. Va rugam sa consultati Termenii si conditiile de utilizare a site-ului. Informati-va despre Politica de confidentialitate. Daca aveti intrebari sau sugestii care pot ajuta la dezvoltarea site-ului va rugam sa ne scrieti la adresa webmaster@referat.ro.