-----------------------------------------------------------------------------
Expand|Select|Wrap|Line Numbers
- DECLARE
- CURSOR EMPREC IS SELECT * FROM EMP FOR UPDATE OF SAL;
- MYREC EMPREC%ROWTYPE;
- NUM NUMBER(4);
- BEGIN
- OPEN EMPREC;
- LOOP
- FETCH EMPREC INTO MYREC;
- EXIT WHEN EMPREC%NOTFOUND;
- NUM:=EMPREC%ROWCOUNT;
- UPDATE EMP SET SAL=4000 WHERE CURRENT OF EMPREC;
- END LOOP;
- CLOSE EMPREC;
- DBMS_OUTPUT.PUT_LINE(NUM ||' RECORDS UPDATED');
- END;
-----------------------------------------------------------------------------------
Expand|Select|Wrap|Line Numbers
- DECLARE
- RR EMP%ROWTYPE;
- CURSOR C1 (MDEPTNO NUMBER,MJOB VARCHAR) IS
- SELECT * FROM EMP WHERE DEPTNO=MDEPTNO AND JOB=MJOB;
- BEGIN
- OPEN C1(20,'CLERK');
- LOOP
- FETCH C1 INTO RR;
- EXIT WHEN C1%NOTFOUND;
- DBMS_OUTPUT.PUT_LINE(RR.ENAME);
- END LOOP;
- CLOSE C1;
- END;
so the cursor partially acts like a IN mode procedure.
PARAMETER is passed at the time of OPENing the cursor.
SAMPLE PROGRAM SO SHOW USE OF CURSOR WITHIN CURSOR
================================================== ==
Expand|Select|Wrap|Line Numbers
- declare
- cursor c1 is select deptno from dept order by deptno;
- cursor c2 (mm dept.deptno%type) is select ename from emp where deptno=mm;
- begin
- for mrec in c1 loop
- for mrec1 in c2(mrec.deptno) loop
- dbms_output.put_line(mrec1.ename);
- end loop;
- end loop;
- end;
Also Check PL/SQL-CURSOR - 4