Strong Ref Cursors
Has an return datatype
SET SERVEROUTPUT ON;
DECLARE
TYPE cur_type IS REF CURSOR RETURN employees%ROWTYPE;
my_cur cur_type;
v_emp employees%ROWTYPE;
BEGIN
OPEN my_cur FOR
SELECT * FROM employees WHERE employee_id = 100;
FETCH my_cur INTO v_emp;
DBMS_OUTPUT.PUT_LINE('Name : ' || v_emp.first_name || ' ' || v_emp.last_name);
CLOSE my_cur;
END;
/
Ref Cursor using User Type
SET SERVEROUTPUT ON;
DECLARE
TYPE my_type IS RECORD (
emp_sal employees.salary%TYPE
);
TYPE cur_type IS REF CURSOR RETURN my_type;
my_cur cur_type;
v_emp employees.salary%TYPE;
BEGIN
OPEN my_cur FOR
SELECT salary FROM employees WHERE employee_id = 100;
FETCH my_cur INTO v_emp;
DBMS_OUTPUT.PUT_LINE('Salary : ' || v_emp);
CLOSE my_cur;
END;
/
Weak Ref Cursors
SET SERVEROUTPUT ON;
DECLARE
TYPE cur_type IS REF CURSOR;
my_cur cur_type;
v_salary employees.salary%TYPE;
v_fname employees.first_name%TYPE;
BEGIN
OPEN my_cur FOR
SELECT first_name, salary FROM employees WHERE employee_id = 100;
FETCH my_cur INTO v_fname,v_salary;
DBMS_OUTPUT.PUT_LINE('First Name : ' || v_fname || ' Salary : ' || v_salary);
CLOSE my_cur;
END;
/
System Ref Cursors
Inbuilt Weak Ref Cursor
SET SERVEROUTPUT ON;
DECLARE
my_cur SYS_REFCURSOR;
v_salary employees.salary%TYPE;
v_fname employees.first_name%TYPE;
BEGIN
OPEN my_cur FOR
SELECT first_name, salary FROM employees WHERE employee_id = 100;
FETCH my_cur INTO v_fname,v_salary;
DBMS_OUTPUT.PUT_LINE('First Name : ' || v_fname || ' Salary : ' || v_salary);
CLOSE my_cur;
END;
/