Cursor in Oracle:-
A cursor is a pointer to a private SQL area that stores information about the processing of a SELECT or DML statements like INSERT, UPDATE, DELETE or MERGE.
Cursor is a mechanism which facilitates you to assign a name to a SELECT statement and manipulate the information within that SQL statement.
How to declare cursor
Syntax:-
Let's see how to define a cursor called c1. We are using a table name "course" having columns "course_id" and "course_name".
Example (1):-
In the above example, the result set of this cursor is all course_id whose course_name matches the variable called name_in.
How to use cursor in a function:-
Example (2):-
Output
How to open a cursor:- After the declaration of the cursor, you have to use the open statement to open the cursor.
Syntax:-
Example (3):-
How to use open cursor in a function:- This function specifies how to use the open statement.
Example (4):-
Output
How to fetch rows from cursor:- This statement is used after declaring and opening your cursor. It is used to fetch rows from cursor.
Syntax:-
Parameters:-
1) cursor_name: It specifies the name of the cursor that you wish to fetch rows.
2) variable_list: It specifies the list of variables that you wish to store the cursor result set in.
Example (5): Consider a cursor defined as
Statement used for fetching data
Let's take an example to fetch course_id into the variable called cnumber.
How to close cursor:- CLOSE statement is a final step and it is used to close the cursor once you have finished using it.
Syntax:-
Statement for closing cursor:-
Example (6):- The following example specifies how to close the cursor.
Cursor within cursor:- It is also possible to declare a cursor within a cursor. the following example specifies how to declare a cursor within a cursor. In this example, there is a cursor named get_tables that retrieves the owner and table_name values. These values are then used in a second cursor called get_columns.
Example:-
Output:-
How to declare cursor
Syntax:-
CURSOR cursor_name IS SELECT_statement;
Let's see how to define a cursor called c1. We are using a table name "course" having columns "course_id" and "course_name".
Example (1):-
CURSOR c1 IS SELECT course_id FROM courses WHERE course_name = name_in;
In the above example, the result set of this cursor is all course_id whose course_name matches the variable called name_in.
How to use cursor in a function:-
Example (2):-
CREATE OR REPLACE Function FindCourse ( name_in IN varchar2 ) RETURN number IS cnumber number; CURSOR c1 IS SELECT course_id FROM courses WHERE course_name = name_in; BEGIN OPEN c1; FETCH c1 INTO cnumber; if c1%notfound then cnumber := 9999; end if; CLOSE c1; RETURN cnumber; END;
Output
Function created. 0.09 seconds
How to open a cursor:- After the declaration of the cursor, you have to use the open statement to open the cursor.
Syntax:-
OPEN cursor_name; Example OPEN c1;
Example (3):-
OPEN c1;
How to use open cursor in a function:- This function specifies how to use the open statement.
Example (4):-
CREATE OR REPLACE Function FindCourse ( name_in IN varchar2 ) RETURN number IS cnumber number; CURSOR c1 IS SELECT course_id FROM courses WHERE course_name = name_in; BEGIN OPEN c1; FETCH c1 INTO cnumber; if c1%notfound then cnumber := 9999; end if; CLOSE c1; RETURN cnumber; END;
Output
Function created. 0.09 seconds
How to fetch rows from cursor:- This statement is used after declaring and opening your cursor. It is used to fetch rows from cursor.
Syntax:-
FETCH cursor_name INTO variable_list;
Parameters:-
1) cursor_name: It specifies the name of the cursor that you wish to fetch rows.
2) variable_list: It specifies the list of variables that you wish to store the cursor result set in.
Example (5): Consider a cursor defined as
CURSOR c1 IS SELECT course_id FROM courses WHERE course_name = name_in;
Statement used for fetching data
FETCH c1 into cnumber;
Let's take an example to fetch course_id into the variable called cnumber.
CREATE OR REPLACE Function FindCourse ( name_in IN varchar2 ) RETURN number IS cnumber number; CURSOR c1 IS SELECT course_id FROM courses WHERE course_name = name_in; BEGIN OPEN c1; FETCH c1 INTO cnumber; if c1%notfound then cnumber := 9999; end if; CLOSE c1; RETURN cnumber; END;
How to close cursor:- CLOSE statement is a final step and it is used to close the cursor once you have finished using it.
Syntax:-
CLOSE cursor_name;
Statement for closing cursor:-
CLOSE c1;
Example (6):- The following example specifies how to close the cursor.
CREATE OR REPLACE Function FindCourse ( name_in IN varchar2 ) RETURN number IS cnumber number; CURSOR c1 IS SELECT course_id FROM courses WHERE course_name = name_in; BEGIN OPEN c1; FETCH c1 INTO cnumber; if c1%notfound then cnumber := 9999; end if; CLOSE c1; RETURN cnumber; END;
Cursor within cursor:- It is also possible to declare a cursor within a cursor. the following example specifies how to declare a cursor within a cursor. In this example, there is a cursor named get_tables that retrieves the owner and table_name values. These values are then used in a second cursor called get_columns.
Example:-
CREATE OR REPLACE PROCEDURE MULTIPLE_CURSORS_PROC is v_owner varchar2(40); v_table_name varchar2(40); v_column_name varchar2(100); /* First cursor */ CURSOR get_tables IS SELECT DISTINCT tbl.owner, tbl.table_name FROM all_tables tbl WHERE tbl.owner = 'SYSTEM'; /* Second cursor */ CURSOR get_columns IS SELECT DISTINCT col.column_name FROM all_tab_columns col WHERE col.owner = v_owner AND col.table_name = v_table_name; BEGIN -- Open first cursor OPEN get_tables; LOOP FETCH get_tables INTO v_owner, v_table_name; -- Open second cursor OPEN get_columns; LOOP FETCH get_columns INTO v_column_name; END LOOP; CLOSE get_columns; END LOOP; CLOSE get_tables; EXCEPTION WHEN OTHERS THEN raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM); end MULTIPLE_CURSORS_PROC;
Output:-
Procedure created. 0.16 seconds