MySQL Cursors

reggieniccolosantos 1,591 views 12 slides Oct 07, 2013
Slide 1
Slide 1 of 12
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12

About This Presentation

MySQL Cursors
- Definition
- Syntax
- Example


Slide Content

MySQL Cursors
Reggie Niccolo Santos
UP ITDC

Outline

What is a cursor?

Additional characteristics

Syntax

Example

What is a cursor?

Allows you to iterate through a result set
returned by a SELECT statement

Allows you to iterate over a set of rows
returned by a query and process each row
accordingly

MySQL Cursor Characteristics

Read-only
-You cannot update data in the
underlying table through the cursor

MySQL Cursor Characteristics

Non-scrollable
-You can only fetch rows in the order
determined by the SELECT
statement
-You cannot fetch rows in the
reversed order
-You cannot skip rows or jump to a
specific row in the result set

MySQL Cursor Characteristics

Asensitive
-Points to the actual data, whereas
an insensitive cursor uses a
temporary copy of the data
-Faster than an insensitive cursor

Syntax
DECLARE cursor_name CURSOR FOR
select_statement
OPEN cursor_name
FETCH [[NEXT] FROM] cursor_name INTO
var_name [, var_name] ...
CLOSE cursor_name

Things to Note

The SELECT statement cannot have an
INTO clause

Cursor declarations must appear before
handler declarations and after variable and
condition declarations

Things to Note

If no more rows are available, a No Data
condition occurs with a SQLSTATE value
'02000'. To detect this condition, you can
setup a handler for it (or for a NOT FOUND
condition)

Example
DECLARE v_finished INTEGER DEFAULT 0;
DECLARE v_email VARCHAR(255) DEFAULT "";
DECLARE email_list VARCHAR(1000) DEFAULT "";

# declare cursor for student email
DECLARE email_cursor CURSOR FOR
SELECT email FROM
student_record.students;

# declare NOT FOUND handler
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET v_finished = 1;

Example
OPEN email_cursor;
get_email: LOOP
FETCH email_cursor INTO v_email;
IF v_finished = 1 THEN
LEAVE get_email;
END IF;
-- build email list
SET email_list = CONCAT(v_email, ";",
email_list);
END LOOP get_email;
CLOSE email_cursor;

References

Http://www.mysqltutorial.org/mysql-cursor/

Http://www.brainbell.com/tutorials/MySQL/Working_With_Cursors.htm