Cursor variables, PL-SQL Programming

Cursor Variables

Similar to a cursor, cursor variable points to the current row in the result set of a multi-row query. But, dissimilar a cursor, a cursor variable can be opened for any type-compatible query. It is not tied to a specific query. The Cursor variables are true PL/SQL variables, to which you can assign new values and can pass to subprograms stored in an Oracle database. This gives you a convenient way and more flexibility to centralize data retrieval.

Normally, you open a cursor variable by passing it to a stored procedure that declares a cursor variable as one of its formal parameters. The following process opens the cursor variable generic_cv for the chosen query:

PROCEDURE open_cv (generic_cv IN OUT GenericCurTyp,choice NUMBER) IS BEGIN

IF choice = 1 THEN

OPEN generic_cv FOR SELECT * FROM emp; ELSIF choice = 2 THEN

OPEN generic_cv FOR SELECT * FROM dept; ELSIF choice = 3 THEN

OPEN generic_cv FOR SELECT * FROM salgrade; END IF;


The PL/SQL variables and cursors have attributes that are properties that let you reference the datatype and structure of an item without repeating its definition. The Database columns and tables have same attributes that you can use to ease maintenance. A percent sign (%) serves as the attribute indicator.



The %TYPE attribute provides the datatype of a variable or database column. This is principally useful when declaring variables that will hold database values. For example, suppose there is a column named title in a table named books. To declare a variable named my_title  which has the same datatype as column title, use dot notation and the %TYPE   attribute, as shown:

my_title books.title%TYPE;

Declaring my_title with %TYPE has two benefits. First, you do not require knowing the exact datatype of the title. Second, if you change the database definition of title (make it a big character string for example), the datatype of my_title changes consequently at run time.


The PL/SQL, records are used to group data. A record consists of a number of related fields in which the data values can be stored. The %ROWTYPE attribute gives a record type that shows a row in a table. The record can store a whole row of data selected from the table or fetched from a cursor or cursor variable.

The Columns in a row and corresponding fields in a record have similar names and datatypes. In the illustration below, you declare a record named dept_rec. Its fields have similar names and datatypes as the columns in the dept table.


dept_rec dept%ROWTYPE;            -- declare record variable

You use dot notation to reference the fields, as the example below shows:

my_deptno := dept_rec.deptno;

If you declare a cursor which retrieves the job title, last name, salary and hire date of an employee, you can use %ROWTYPE  to declare a record that stores similar information, as shown:



SELECT ename, sal, hiredate, job FROM emp;

emp_rec c1%ROWTYPE;                               

-- declare record variable that represents

-- a row fetched from the emp table

When you execute the statement

FETCH c1 INTO emp_rec;

The value in the ename  column of the emp table is assigned to the ename field of emp_rec, the value in the sal   column is assigned to the sal field, and so on. Figure represents how the result might appear.

787_cursor variables.png

Figure: %ROWTYPE Record emp_rec

Posted Date: 10/2/2012 1:45:19 AM | Location : United States

Related Discussions:- Cursor variables, Assignment Help, Ask Question on Cursor variables, Get Answer, Expert's Help, Cursor variables Discussions

Write discussion on Cursor variables
Your posts are moderated
Related Questions
Introduction Oracle 9i - it was made public in the year 2001 with over 400 features, and graphics, it has merged the traditional business with modern internet application

Based on the EMPLOYEE table created in Assignment #1, write a PL/SQL anonymous block that accepts an employee ID from the user input and finds whether the employee ID is in the EMP

I need SQL to infopath data connection Project Description: Want data retrieval connection from SQL to SharePoint infopath Skills required are Sharepoint, SQL

heap sort program in pl/sql

Predefined Exceptions The internal exception is raised implicitly whenever your PL/SQL program exceeds a system-dependent limit or violates an Oracle rule. Each & every Oracle

Using Aggregation on Nested Tables Example is the most direct translation of its counterpart in the theory book that can be obtained in SQL but it is so over-elaborate that no

Identifiers You use identifiers to name the PL/SQL program items and units that include constants, variables, cursors, exceptions, cursor variables, subprograms, and packages.

SQL Cursor   The Oracle implicitly opens a cursor to process each SQL statement not related with an explicit cursor. The PL/SQL refers to the most current implicit cursor as t

Implicit Cursors The Oracle implicitly opens a cursor to process each SQL statement not related with an explicitly declared cursor. The PL/SQL lets you refer to the most recen

Task 2 [12 marks] Write the package body for the following package specification (the detailed description of each function and procedure is provided in the appendix below). Place