Documente Academic
Documente Profesional
Documente Cultură
Lectia Aim
În aceasta lectie veti învata sa scrieti cursori expliciti, în special cei care folosesc
parametri si tabele de înregistrari PL/SQL.
Cursori cu parametri
Sintaxa :
CURSOR cursor_name
[(parameter_name datatype, …)]
IS
Select_statement;
Cursori cu parametri
Parametri permit valorilor sa fie transmise unui cursor atunci când este deschis si sa
fie folosite într-o interogare atunci când se executa. Aceasta înseamna ca puteti
deschide si închide de câteva ori un cursor explicit într-un bloc, returnând de fiecare
data un set activ diferit.
Fiecare parametru formal declarat în cursor trebuie sa aiba un parametru actual
corespondent în OPEN. Tipurile de date ale parametrilor sunt la fel ca cele pentru
1
variabile scalare, dar nu le veti da aceleasi dimensiuni. Numele parametrilor sunt
pentru referirile din expresia interogarii cursorului.
În sintaxa,
Cursori cu parametri
Exemplu
DECLARE
CURSOR c1
(v_depno NUMBER, v_job VARCHAR2) IS
SELECT empno, ename
FROM emp
WHERE deptno = v_deptno
AND job = v_job;
BEGIN
OPEN c1 (10, ‘CLERK’);
…
Tipurile parametrilor sunt la fel cu cele pentru variabile scalare, dar nu le dati
dimensiunea. Numele parametrilor sunt pentru referiri în interogarea cursorului.
În exemplul urmator, sunt declarate doua variabile si un cursor. Cursorul este definit
cu doi parametri.
DECLARE
Job_emp emp.job%TYPE := ‘CLERK’;
V_ename emp.ename%TYPE;
CURSOR c1 (v_deptno NUMBER, v_job VARCHAR2) IS
SELECT…
2
Urmatoarele propozitii deschid cursorul:
DECLARE
CURSOR c1 (v_depno NUMBER, v_job VARCHAR2) IS
SELECT…
BEGIN
FOR emp record IN c1 (20, ‘ANALYST’) LOOP…
Sintaxa:
SELECT…
FROM
FOR UPDATE [OF column_reference] [NOWAIT]
Puteti bloca liniile înainte de modificare sau stergere. Adaugati clauza FOR UPDATE
în interogarea cursorului pentru a bloca liniile aferente atunci când cursorul este
deschis. Deoarece Server-ul Oracle realizeaza blocarile la sfârsitul tranzactiei, ar
trebui sa nu comiteti asupra fetch-urilor dintr-un cursor explicit daca este folosita
FOR UPDATE.
În sintaxa:
3
Cand interogam mai multe tabele, puteti folosi clauza FOR UPDATE pentru a va
limita la liniile blocate ale unor anumite tabele. Liniile într-o tabela sunt blocate
numai daca clauza FOR UPDATE se refera la o coloana din acea tabela.
Liniile blocate exclusiv sunt luate în liniile rezultatului înainte de returnarea lui OPEN
când este folosita clauza FOR UPDATE.
Exemplu
DECLARE
CURSOR c1 IS
SELECT empno, ename
FROM emp
FOR UPDATE NOWAIT;
Sintaxa:
WHERE CURRENT OF cursor
Foloseste cursorii pentru modificarea si stergerea liniei
curente.
Include clauza FOR UPDATE în interogarea cursorului
pentru a bloca întâi liniile.
Foloseste clauza WHERE CURRENT OF pentru a se
referi la linia curenta dintr-un cursor explicit.
4
Clauza WHERE CURRENT OF
Când va referiti la linia curenta dintr-un cursor explicit, folositi clauza WHERE
CURRENT OF. Aceasta va permite sa modificati si sa stergeti linia curenta, fara a
folosi explicit ROWID. Trebuie sa includeti clauza FOR UPDATE în interogarea
cursorului pentru ca liniile sa fie blocate pentru OPEN.
În sintaxa,
Cursor este numele cursorului declarat. Cursorul trebuie sa fi fost declarat
folosind clauza FOR UPDATE.
Exemplu
DECLARE
CURSOR c1 IS
SELECT…
FOR UPDATE NOWAIT;
BEGIN
…
FOR emp_record IN c1 LOOP
UPDATE…
WHERE CURRENT OF C1;
…
END LOOP;
COMMIT;
END;
CURSORI CU SUBINTEROGARI
Exemplu
DECLARE
CURSOR my_cursor IS
SELECT t1.deptno, dname, STAFF
FROM dept t1, (SELECT deptno, count (*) STAFF
FROM emp
GROUP BY deptno) t2
WHERE t1.deptno=t2.deptno
AND STAFF >= 5;
5
Subînterogari
O subînterogare este o înterogare (de obicei cuprinsa de paranteze) care apare
împreuna cu alte instructiuni SQL.
Subînterogarile sunt de obicei folosite în clauza WHERE.
Pot fi folosite subînterogari sau subînterogari corelate.
Cuprins
Aplicatie practica
Aplicatie practica
Aceasta aplicatie foloseste cunostintele voastre despre cursori cu parametri pentru a
procesa un numar de linii din tabele.