LogoASPAlliance: Articles, reviews, and samples for .NET Developers
CodeSnip: Using Dynamic Cursor in a Procedure Using Oracle 9i
by Deepankar Sarangi
Average Rating: This article has not yet been rated.
Views (Total / Last 10 Days): 27904/ 117


When the table to be used inside a cursor is not known to the user while creating the procedure, a ref cursor can be used to pass the name of the table dynamically as the input parameter to the procedure. The procedure also serves the purpose of being used again and again for many different tables of similar type as per the business requirement.


Oracle database 9i


Listing 1

PROCEDURE referenced_cursor_p (in_table_nm IN VARCHAR2, in_job_name IN VARCHAR2)
       TYPE CUR_TYPE             IS REF CURSOR;
       managers                  CUR_TYPE;
       manager_name              VARCHAR2 (20);
       sql_stmt                  VARCHAR2 (200);
       job_name                  VARCHAR2 (20):=in_job_name;
       /*Use of cursor in selecting the SALES Guys*/
       sql_stmt := 
'SELECT distinct ENAME FROM '||in_table_nm||' WHERE JOB ='''||job_name||'''';
       dbms_output.put_line('Use of cursor in selecting the Managers');
/*Opened the ref cursor where the table name is passed dynamically through a string*/
       Open managers for sql_stmt;
       FETCH managers INTO manager_name;
       EXIT WHEN managers%NOTFOUND;
       dbms_output.put_line(manager_name||' is a Manager');
       end loop;
END referenced_cursor_p;

Here in the code section we have tried to select records from a table called EMP through a ref cursor. The string that selects the records for the cursor has been dynamically built up as per the choice of table name and the selection criteria.

This kind of cursor declaration is not possible with the knowledge of simple cursor where especially the table name is either not known or cannot be hard coded due to business requirements.

Also, this kind of cursor declaration makes the code reusable and more efficient.

Execution output

Figure 1

By applying a different table name with the kind of selection criteria we can fetch a different set of records using the same procedure.


By following the mentioned approach the user can use same procedure multiple times for a different set of tables again and again. The user also does not have to bother about the table name while declaring the cursor.

©Copyright 1998-2019  |  Page Processed at 2019-12-07 1:31:14 AM  AspAlliance Recent Articles RSS Feed
About ASPAlliance | Newsgroups | Advertise | Authors | Email Lists | Feedback | Link To Us | Privacy | Search