A Simple Example of a MySQL Stored Procedure that uses a cursor
http://www.kbedell.com/2009/03/02/a-simple-example-of-a-mysql-stored-procedure-that-uses-a-cursor/
----
drop table if exists friend_status;
CREATE TABLE IF NOT EXISTS `friend_status` (
`id` INTEGER(10) unsigned NOT NULL auto_increment,
`name` VARCHAR(255) NOT NULL,
`status_update` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`)
);
insert into friend_status
(name, status_update)
values
('John', 'Woke up. Guiness for Brkfst.')
, ('Fred', 'is thinking about joining the circus')
, ('Erin', "Getting ready for a job interview")
, ('Amy', 'at work and dreaming of kittens')
, ('John', 'Watching Scooby Doo reruns. Guiness for Lunch.')
, ('Amy', 'dreaming of fuzzy slippers and wedding dresses')
, ('Julie', 'is hating working two jobs')
, ('John', 'Out of the shower finally. Guiness for Dinner.')
, ('Erin', "if I don't get this job, I'll be asking 'Paper or Plastic?'")
, ('Amy', 'dreaming of Meeting Mr. Right!')
, ('Erin', 'Nailed the job interview -- calling John to celebrate!')
, ('Amy', 'John called -- meeting him at the pub!')
, ('John', 'Heading out to meet friends for some Guiness!')
;
----
DROP PROCEDURE IF EXISTS `usp_cursor_example`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `usp_cursor_example`(
IN name_in VARCHAR(255)
)
READS SQL DATA
BEGIN
/*
All 'DECLARE' statements must come first
*/
-- Declare '_val' variables to read in each record from the cursor
DECLARE name_val VARCHAR(255);
DECLARE status_update_val VARCHAR(255);
-- Declare variables used just for cursor and loop control
DECLARE no_more_rows BOOLEAN;
DECLARE loop_cntr INT DEFAULT 0;
DECLARE num_rows INT DEFAULT 0;
-- Declare the cursor
DECLARE friends_cur CURSOR FOR
SELECT name, status_update
FROM friend_status
WHERE name = name_in;
-- Declare 'handlers' for exceptions
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET no_more_rows = TRUE;
/*
Now the programming logic
*/
-- 'open' the cursor and capture the number of rows returned
-- (the 'select' gets invoked when the cursor is 'opened')
OPEN friends_cur;
select FOUND_ROWS() into num_rows;
the_loop: LOOP
FETCH friends_cur INTO name_val, status_update_val;
-- break out of the loop if
-- 1) there were no records, or
-- 2) we've processed them all
IF no_more_rows THEN
CLOSE friends_cur;
LEAVE the_loop;
END IF;
-- the equivalent of a 'print statement' in a stored procedure
-- it simply displays output for each loop
select name_val, status_update_val;
-- count the number of times looped
SET loop_cntr = loop_cntr + 1;
END LOOP the_loop;
-- 'print' the output so we can see they are the same
select num_rows, loop_cntr;
END
$$
DELIMITER ;
分享到:
相关推荐
3. 条件判断与循环:可能需要在存储过程中使用IF-ELSE结构进行条件判断,或者使用WHILE或LOOP结构进行循环操作,这在处理复杂逻辑时非常常见。 4. 结果集处理:根据项目需求,可能需要对游标遍历的结果进行更新、...
CREATE PROCEDURE getUserInfo(in date_day datetime)— — 实例— MYSQL存储过程名为:getUserInfo— 参数为:date_day日期格式:2008-03-08— BEGINdeclare _userName varchar(12); — 用户名declare _chinese int...
总结来说,这个示例展示了如何在MySQL存储过程中使用游标进行循环处理,并在循环内部再次嵌套游标以实现更精细的数据操作。这种技术在处理大量数据或执行复杂逻辑时非常有用,尤其是在需要逐行检查和处理数据的情况...
Mysql存储过程游标触发器
本例展示了如何在MySQL中使用游标来循环处理查询结果。通过定义游标、打开游标、获取数据、处理数据、关闭游标这一系列步骤,我们可以有效地对查询结果进行逐行处理。这种技术特别适用于需要对每一行数据进行复杂...
- **从游标中获取数据**:使用`FETCH`语句从游标中获取数据。常见的`FETCH`选项有: - `NEXT`:获取下一行数据。 - `PRIOR`:获取上一行数据。 - `FIRST`:获取第一行数据。 - `LAST`:获取最后一行数据。 - `...
mysql存储过程 多个游标循环(依次执行,非嵌套循环)REPEAT循环。有需要的可自行下载。
本资源结合实例实现一个复杂的存储过程,存储过程中有用到游标、临时表、循环、递归等知识,sql文件附有实例数据表创建的sql语句。
本篇文章将详细讨论在MySQL存储过程中如何使用游标循环,并特别关注如何进行跳出和继续操作。 首先,游标循环通常有三种基本形式:`LOOP`、`REPEAT`和`WHILE`。每种循环结构都有其特定的语法和用途,但核心思想都是...
Oracle 存储过程游标是指在 Oracle 数据库中使用游标来实现对结果集的处理和操作。游标可以分为静态游标和REF游标两种类型。静态游标是指结果集已经确实(静态定义)的游标,可以进一步分为隐式游标和显示游标。隐式...
MySQL 存储过程与游标的混合使用,也没啥重要的,就是和其他数据库有一些不同而已,作为总结,以后复习
根据提供的文件信息,本文将详细解释一个MySQL存储过程的例子,其中包含了游标的使用。这个存储过程主要用于处理一批数据,涉及到日期范围内的数据处理、异常处理等。下面将逐一解析存储过程中涉及的重要知识点。 #...
MySql存储过程,游标的使用方法,速度极快!
下面是一个MySQL存储过程中使用游标的示例代码: ```sql DELIMITER $$ CREATE PROCEDURE FetchEmployees() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE emp_id INT; DECLARE emp_name VARCHAR(255); ...
MySQL是世界上最流行的开源关系型数据库管理系统之一,它包含多种功能,如函数、存储过程、触发器和游标,这些功能极大地增强了数据库管理的灵活性和效率。以下是对这些概念的详细解释: 1. **MySQL函数**:MySQL...
3. **从游标中获取数据**(`FETCH cursor_name INTO variable_list`):逐条读取数据并将其存储到变量中。 4. **关闭和释放游标**(`CLOSE cursor_name` 和 `DEALLOCATE cursor_name`):当不再需要游标时,应关闭并...
首先,我们注意到在创建存储过程`myProc`时,使用了`delimiter $$`来改变MySQL客户端的语句分隔符,这是为了在存储过程中使用多个分号(;)而不会导致命令提前结束。存储过程的定义如下: ```sql CREATE PROCEDURE ...