C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
Oracle CursorA 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 cursorSyntax 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 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 functionExample 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 cursorAfter the declaration of the cursor, you have to use the open statement to open the cursor. Syntax OPEN cursor_name; Example OPEN c1; How to use open cursor in a functionThis function specifies how to use the open statement. Example 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 cursorThis 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: 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 cursorCLOSE 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 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 cursorIt 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 Note: You have to continuously open and close the second cursor each time a new record is retrieved from the first cursor. That way, the second cursor will use the new variable values from the first cursor.
Next TopicOracle Trigger
|