ORACLE foloseste arii de lucru private SQL, arii care executa declaratii SQL si care memoreaza informatii de procesare. Cursorul este o constructie PL/SQL, care iti permite sa denumesti aceste arii de lucru si care acceseaza informatia. Exista doua tipuri de cursor: - Cursor 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; - Cursor 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. Atribute ale cursorului implicit: SQL%ROWCOUNT SQL%FOUND SQL%NOTFOUND Exemplu: Folosirea atributului SQL%FOUND CREATE TABLE dept_temp AS SELECT * FROM departments; DECLARE dept_no NUMBER(4) := 270; BEGIN DELETE FROM dept_temp WHERE department_id = dept_no; IF SQL%FOUND THEN --daca stergerea s-a efectuat cu succes INSERT INTO dept_temp VALUES (270, 'Personnel', 200, 1700); END IF; END; %NOTFOUND %NOTFOUND este atributul opus lui %FOUND. %NOTFOUND este TRUE daca INSERT, UPDATE sau DELETE nu afecteaza nici o inregistrare din baza de date sau SELECT INTO nu returneaza nici o inregistrare.Altfel este FALSE. - %ROWCOUNT %ROWCOUNT returneaza numarul de inregistrari afectate de una din comenzile INSERT, UPDATE, sau DELETE sau numarul de inregistrari afectate de SELECT INTO. %ROWCOUNT este 0 daca comanda INSERT, UPDATE, sau DELETE nu afecteaza nici o inregistrae, sau SELECT INTO nu returneaza nici o inregistrare. Exemplu: Folosirea SQL%ROWCOUNT DECLARE mgr_no NUMBER(6) := 122; BEGIN DELETE FROM angajati WHERE manager_id = mgr_no; DBMS_OUTPUT.PUT_LINE( 'nr de angajati stersi este: ' || TO_CHAR(SQL%ROWCOUNT)); END; Valoarea atributului SQL%ROWCOUNT se refera la cea mai recenta comanda SQL executata in PL/SQL. Controlul explicit al cursorului - pe pasi Cursorul explicit poate fi controlat prin 4 tipuri separate de actiuni: DECLARE Numeste cursorul, si defineste structura interogarii care sa fie efectuate cu el. La acest nivel, interogarea este parcursa (coloane, tabele, etc) dar nu este executata. Instructiunea CURSOR Este folosita pentru a declara un cursor explicit. Parametrii pot fi definiti pentru a permite substitutia valorilor in interogare cand cursorul este OPEN. Variabilele pot fi deasemeni referite in interogare, dar trebuie sa fie declarate inaintea instructiunii CURSOR. Sintaxa: CURSOR identificator [(parameter details)] IS query-expression; unde query-expression este o instructiune SELECT care poate include majoritatea clauzelor, dar nu o clauza INTO. Nu trebuie definit NULL ca un obiect SELECT. Exemplu : DECLARE CURSOR c1 IS SELECT nume, salariul, data_angajare FROM angajati WHERE id_angajat=200; OPEN Executa interogarea, legand orice variabila care a fost referentiata. Liniile intoarse de interogare, numita "set-activ" sunt acum disponibile pentru extragere. Este utilizata in cadrul actiunilor executabile dintr-un bloc, si stabileste un set activ de randuri. Sintaxa: OPEN cursor-identif [(lista argumente)] ; Exemplu: OPEN c1; Cursorul va pointa catre primul rand in setul activ, ca de exemplu: > SCOTT 3000 16-jan-90 FORD 3000 03-dec-81 De observat ca exceptiile nu sunt lansate daca cererea nu intoarce niciun rand cand este deschis cursorul. Starea cursorului poate, totusi, sa fie testata dupa un FETCH. FETCH Memoreaza valorile din linia curenta in variabile. Linia curenta este linia la care cursorul pointeaza. Fiecare FETCH produce mutarea cursorului sa indice la linia urmatoare in setul activ, si deci fiecare FETCH va accesa o linie diferita returnata de interogare.
După plată vei primi prin email un cod de download pentru a descărca gratis oricare alt referat de pe site (vezi detalii).