Курсор очиш учун OPEN командасидан фойдаланиш лозим:
DECLARE
CURSOR c1 IS SELECT ename, job FROM emp WHERE sal < 3000;
...
BEGIN
OPEN c1;
...
END;
OPEN жумласи орқали курсорга параметрларни узатиш мумкин:
DECLARE
emp_name emp.ename%TYPE;
salary emp.sal%TYPE;
CURSOR c1 (name VARCHAR2, salary NUMBER) IS SELECT ...
OPEN c1(emp_name, 3000);
OPEN c1('ATTLEY', 1500);
OPEN c1(emp_name, salary);
Курсордан қаторларни олиш
FETCH жумласи орқали курсор қаторларини битта-битта суғуриб олиш мумкин:
FETCH c1 INTO my_empno, my_ename, my_deptno;
ёки
LOOP
FETCH c1 INTO my_record;
EXIT WHEN c1%NOTFOUND;
-- process data record
END LOOP;
Сўровдаги ҳар бир ўзгарувчи курсор очилганда ҳисобланади. Қуйидаги мисолда ҳар бир SALARY қиймати 2 га кўпайтириб олинади:
DECLARE
my_sal emp.sal%TYPE;
my_job emp.job%TYPE;
factor INTEGER := 2;
CURSOR c1 IS SELECT factor*sal FROM emp WHERE job = my_job;
BEGIN
...
OPEN c1; -- бу ерда factor 2-га тенг
LOOP
FETCH c1 INTO my_sal;
EXIT WHEN c1%NOTFOUND;
factor := factor + 1; --FETCH таъсири йўқ END LOOP;
END;
Курсор қийматини ўзгартириш учун қатор INTO жумлалларидан фойдаланиш мумкин:
DECLARE
CURSOR c1 IS SELECT ename FROM emp;
name1 emp.ename%TYPE;
name2 emp.ename%TYPE;
name3 emp.ename%TYPE;
BEGIN
OPEN c1;
FETCH c1 INTO name1; -- биринчи қатор олинади
FETCH c1 INTO name2; -- иккинчи қатор олинади FETCH c1 INTO name3; -- учинчи қатор олинади ...
CLOSE c1;
END;
Курсорни ёпиш
Курсорни ёпиш учун CLOSE жумласидан фойдаланиш лозим:
CLOSE c1;
Do'stlaringiz bilan baham: |