PL-SQL Cursor based Records-Learn how to declare and define a Cursor with select statement. Also Learn use of cursor declaration with %ROWTYPE and cursor field declaration with %TYPE with Examples.
PL-SQL Cursor based Records
For Cursor based records structure is taken from the select query list of a cursor.
Each field in the select query list of cursor can access cursor base records.
Cursor based records are replica of select query list of a cursor.
yo can defines column aliases in the select query of a cursor.
Cursor-based record declaration
Syntax
DECLARE
<CURSOR_RECORD> CURSOR_NAME%ROWTYPE;
Cursor-based field declaration
Syntax
CURSOR_FILED CURSOR_RECORD%TYPE
Below are the programs to show how to use %ROWTYPE and %TYPE in cursors.
Exampe Program – 1 – Cursor_name With %ROWTYPE
DECLARE
-- Cursor Declaration With Select statement
CURSOR EMPLOYEE_CUR
IS
SELECT * FROM EMPLOYEE_TBL1 WHERE ID <=3;
-- declaring replica of cursor with Original Cursor.
EMPLOYEE_REC EMPLOYEE_CUR%ROWTYPE;
BEGIN
OPEN EMPLOYEE_CUR;
LOOP
FETCH EMPLOYEE_CUR INTO EMPLOYEE_REC;
EXIT
WHEN EMPLOYEE_CUR%NOTFOUND;
dbms_output.put_line('Employee ID: ' || EMPLOYEE_REC.id);
dbms_output.put_line('Employee Name: ' || EMPLOYEE_REC.name);
dbms_output.put_line('Employee Gender: ' || EMPLOYEE_REC.Gender);
dbms_output.put_line('Employee Salary: ' || EMPLOYEE_REC.salary);
dbms_output.put_line(' ');
END LOOP;
END;
Output
Employee ID: 1
Employee Name: Tom
Employee Gender: Male
Employee Salary: 4000
Employee ID: 2
Employee Name: Pam
Employee Gender: Female
Employee Salary: 3000
Employee ID: 3
Employee Name: John
Employee Gender: Male
Employee Salary: 3500
Exampe Program – 2 – Cursor_name With %ROWTYPE and Cursor_name.field_name with %TYPE
DECLARE
CURSOR EMPLOYEE_CUR
IS
SELECT * FROM EMPLOYEE_TBL1;
--DECLARATION OF CURSOR TYPE %ROWTYPE
EMPLOYEE_REC EMPLOYEE_CUR%ROWTYPE;
--DECLARATION CURSOR FIELD WITH %TYPE
EMPLOYYEE_ID EMPLOYEE_REC.ID%TYPE;
BEGIN
EMPLOYYEE_ID :=3;
OPEN EMPLOYEE_CUR;
LOOP
FETCH EMPLOYEE_CUR INTO EMPLOYEE_REC;
-- COMPARING THE % TYPE FILED VALUE WITH CURSOR%ROWTYPE Field value
EXIT
WHEN EMPLOYEE_REC.ID >
EMPLOYYEE_ID;
dbms_output.put_line('Employee ID: ' || EMPLOYEE_REC.id);
dbms_output.put_line('Employee Name: ' || EMPLOYEE_REC.name);
dbms_output.put_line('Employee Gender: ' || EMPLOYEE_REC.Gender);
dbms_output.put_line('Employee Salary: ' || EMPLOYEE_REC.salary);
dbms_output.put_line(' ');
END LOOP;
END;
Output:
Employee ID: 1
Employee Name: Tom
Employee Gender: Male
Employee Salary: 4000
Employee ID: 2
Employee Name: Pam
Employee Gender: Female
Employee Salary: 3000
Employee ID: 3
Employee Name: John
Employee Gender: Male
Employee Salary: 3500