PLSQL:Explicit Cursors

Explicit Cursors
An explicit cursor is defined in the declaration section of the PL/SQL Block. It is created on a SELECT Statement which returns more than one row. We can provide a suitable name for the cursor.

The General Syntax for creating a cursor is as given below:
CURSOR cursor_name IS select_statement;
cursor_name – A suitable name for the cursor.
select_statement – A select query which returns multiple rows.

There are four steps in using an Explicit Cursor.

  • DECLARE the cursor in the declaration section.
  • OPEN the cursor in the Execution Section.
  • FETCH the data from cursor into PL/SQL variables or records in the Execution Section.
  • CLOSE the cursor in the Execution Section before you end the PL/SQL Block.
Declaring a Cursor in the Declaration Section:

SELECT * FROM emp_tbl WHERE salary > 5000;

In the above example we are creating a cursor ‘emp_cur’ on a query which returns the records of all the employees with salary greater than 5000. Here ‘emp_tbl’ in the table which contains records of all the employees.

Accessing the records in the cursor:

Once the cursor is created in the declaration section we can access the cursor in the execution section of the PL/SQL program.

These are the three steps in accessing the cursor.

  • Open the cursor.
  • Fetch the records in the cursor one at a time.
  • Close the cursor.

General Syntax to open a cursor is:
OPEN cursor_name;

General Syntax to fetch records from a cursor is:
FETCH cursor_name INTO record_name;
FETCH cursor_name INTO variable_list;

General Syntax to close a cursor is:
CLOSE cursor_name;

When a cursor is opened, the first row becomes the current row. When the data is fetched it is copied to the record or variables and the logical pointer moves to the next row and it becomes the current row. On every fetch statement, the pointer moves to the next row. If you want to fetch after the last row, the program will throw an error. When there is more than one row in a cursor we can use loops along with explicit cursor attributes to fetch all the records.

Points to remember while fetching a row:
  • We can fetch the rows in a cursor to a PL/SQL Record or a list of variables created in the PL/SQL Block.
  • If you are fetching a cursor to a PL/SQL Record, the record should have the same structure as the cursor.
  • If you are fetching a cursor to a list of variables, the variables should be listed in the same order in the fetch statement as the columns are present in the cursor.

General Form of using an explicit cursor is:
create a cursor;
OPEN cursor;
FETCH cursor;
process the records;
CLOSE cursor;

Lets Look at the example below

2>    emp_rec emp_tbl%rowtype;
3>    CURSOR emp_cur IS 
4>    SELECT *
5>    FROM 
6>    WHERE salary > 10; 
8>    OPEN emp_cur; 
9>    FETCH emp_cur INTO emp_rec; 
10>      dbms_output.put_line (emp_rec.first_name || '  ' || emp_rec.last_name); 
11>   CLOSE emp_cur; 
12> END;

In the above example, first we are creating a record ‘emp_rec’ of the same structure as of table ‘emp_tbl’ in line no 2. We can also create a record with a cursor by replacing the table name with the cursor name.
Second, we are declaring a cursor ‘emp_cur’ from a select query in line no 3 - 6.
Third, we are opening the cursor in the execution section in line no 8.
Fourth, we are fetching the cursor to the record in line no 9.
Fifth, we are displaying the first_name and last_name of the employee in the record emp_rec in line no 10.
Sixth, we are closing the cursor in line no 11.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License