`

Mysql的存储过程中使用游标

    博客分类:
  • db
阅读更多

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 ;

分享到:
评论

相关推荐

    mysql存储过程_游标_项目练习

    3. 条件判断与循环:可能需要在存储过程中使用IF-ELSE结构进行条件判断,或者使用WHILE或LOOP结构进行循环操作,这在处理复杂逻辑时非常常见。 4. 结果集处理:根据项目需求,可能需要对游标遍历的结果进行更新、...

    mysql存储过程中使用游标的实例

    CREATE PROCEDURE getUserInfo(in date_day datetime)— — 实例— MYSQL存储过程名为:getUserInfo— 参数为:date_day日期格式:2008-03-08— BEGINdeclare _userName varchar(12); — 用户名declare _chinese int...

    Mysql存储过程循环内嵌套使用游标示例代码

    总结来说,这个示例展示了如何在MySQL存储过程中使用游标进行循环处理,并在循环内部再次嵌套游标以实现更精细的数据操作。这种技术在处理大量数据或执行复杂逻辑时非常有用,尤其是在需要逐行检查和处理数据的情况...

    Mysql存储过程游标触发器

    Mysql存储过程游标触发器

    Mysql游标(循环操作)

    本例展示了如何在MySQL中使用游标来循环处理查询结果。通过定义游标、打开游标、获取数据、处理数据、关闭游标这一系列步骤,我们可以有效地对查询结果进行逐行处理。这种技术特别适用于需要对每一行数据进行复杂...

    游标、存储过程的使用事例

    - **从游标中获取数据**:使用`FETCH`语句从游标中获取数据。常见的`FETCH`选项有: - `NEXT`:获取下一行数据。 - `PRIOR`:获取上一行数据。 - `FIRST`:获取第一行数据。 - `LAST`:获取最后一行数据。 - `...

    mysql 多个游标依次执行

    mysql存储过程 多个游标循环(依次执行,非嵌套循环)REPEAT循环。有需要的可自行下载。

    mysql复杂存储过程实例(游标、临时表、循环、递归)

    本资源结合实例实现一个复杂的存储过程,存储过程中有用到游标、临时表、循环、递归等知识,sql文件附有实例数据表创建的sql语句。

    MySQL存储过程中游标循环的跳出和继续操作示例

    本篇文章将详细讨论在MySQL存储过程中如何使用游标循环,并特别关注如何进行跳出和继续操作。 首先,游标循环通常有三种基本形式:`LOOP`、`REPEAT`和`WHILE`。每种循环结构都有其特定的语法和用途,但核心思想都是...

    Oracle存储过程游标详解

    Oracle 存储过程游标是指在 Oracle 数据库中使用游标来实现对结果集的处理和操作。游标可以分为静态游标和REF游标两种类型。静态游标是指结果集已经确实(静态定义)的游标,可以进一步分为隐式游标和显示游标。隐式...

    MySQL 存储过程与游标的混合使用

    MySQL 存储过程与游标的混合使用,也没啥重要的,就是和其他数据库有一些不同而已,作为总结,以后复习

    mysql游标存储过程例子

    根据提供的文件信息,本文将详细解释一个MySQL存储过程的例子,其中包含了游标的使用。这个存储过程主要用于处理一批数据,涉及到日期范围内的数据处理、异常处理等。下面将逐一解析存储过程中涉及的重要知识点。 #...

    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函数、存储过程、触发器、游标.doc

    MySQL是世界上最流行的开源关系型数据库管理系统之一,它包含多种功能,如函数、存储过程、触发器和游标,这些功能极大地增强了数据库管理的灵活性和效率。以下是对这些概念的详细解释: 1. **MySQL函数**:MySQL...

    Mysql中sql语句游标详解

    3. **从游标中获取数据**(`FETCH cursor_name INTO variable_list`):逐条读取数据并将其存储到变量中。 4. **关闭和释放游标**(`CLOSE cursor_name` 和 `DEALLOCATE cursor_name`):当不再需要游标时,应关闭并...

    MySQL存储过程的异常处理方法

    首先,我们注意到在创建存储过程`myProc`时,使用了`delimiter $$`来改变MySQL客户端的语句分隔符,这是为了在存储过程中使用多个分号(;)而不会导致命令提前结束。存储过程的定义如下: ```sql CREATE PROCEDURE ...

Global site tag (gtag.js) - Google Analytics