Wednesday, 23 August 2017

printing values from ref cursor using anonymous block

------------------------------------simple cursor------------------------------------------------------------------
set serveroutput on;
declare
cursor c_emp is
select ename,deptno,hiredate from emp
where months_between(sysdate,hiredate)/12 > 30
order by hiredate desc;
begin
for c_var in c_emp
loop
dbms_output.put_line(c_var.ename||' '||c_var.deptno||' '||c_var.hiredate);
end loop;
end;
-------------------------------------using for loop sub-qury ------------------------------------------------------
set serveroutput on;
declare

begin
for c_var in (
select ename,deptno,hiredate from emp
where months_between(sysdate,hiredate)/12 > 30
order by hiredate desc)
loop
dbms_output.put_line(c_var.ename||' '||c_var.deptno||' '||c_var.hiredate);
end loop;
end;
----------------------using cursor dml operation through multiple rows---------------------------------
set serveroutput on;
declare

begin
for c_var in (
select empno,sal,ename,deptno,hiredate from emp
where months_between(sysdate,hiredate)/12 > 30
order by hiredate desc)
loop
update emp set sal=c_var.sal+100 where empno=c_var.empno;
--dbms_output.put_line(c_var.empno||'  '||c_var.sal||' '||c_var.ename||' '||c_var.deptno||' '||c_var.hiredate);
end loop;
end;
/
select * from emp;
-----------------------------------displaying multiple data using ref_cursor----------------------------
create or replace
procedure ref_proc
(po_result out SYS_REFCURSOR )

as
begin
open po_result for
select empno,sal,ename,deptno,hiredate from emp
where months_between(sysdate,hiredate)/12 > 30
order by hiredate desc;

end;
-- -----------------displaying values from ref cursor using anonymous block---------------------
set serveroutput on;
set autoprint on;
var r refcursor;
DECLARE
  PO_RESULT SYS_REFCURSOR;
BEGIN

  REF_PROC(
    PO_RESULT => :r
  );
  /* Legacy output:
DBMS_OUTPUT.PUT_LINE('PO_RESULT = ' || PO_RESULT);
*/
--  :PO_RESULT := PO_RESULT; --<-- Cursor
END;


No comments:

Post a Comment