韦德国际_韦德国际1946官方网站_韦德国际1946手机版
做最好的网站

游标的切实可行行使方案,MySQL游标的应用

日期:2019-06-11编辑作者:韦德国际1946手机版

以下的稿子首要讲述的是MySQL 游标的有血有肉应用方案,如果您对MySQL 游标的实操有趣味的话,你就能够对以下的稿子点击收看了,希望在您浏览之后会给你带来一些扶植在此方面。

测试表 level ;

测试表 level ;

创立游标

请使用 MySQL 1.5 或以上version;

复制代码 代码如下:

复制代码 代码如下:

先是在MySql中创设一张数据表:

测试表 level ;

create table test.level (name varchar(20));

create table test.level (name varchar(20));

CREATE TABLE IF NOT EXISTS `store` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `count` int(11) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7;

INSERT INTO `store` (`id`, `name`, `count`) VALUES
(1, 'android', 15),
(2, 'iphone', 14),
(3, 'iphone', 20),
(4, 'android', 5),
(5, 'android', 13),
(6, 'iphone', 13);
create table test.level (name varchar(20)); 

再 insert 些数据 ;

再 insert 些数据 ;

我们将来要用存款和储蓄进程做三个作用,总计iphone的总仓库储存是有一点,并把总的数量输出到调整台。

再 insert 些数据 ;

代码

代码

--在windows系统中写存储过程时,如果需要使用declare声明变量,需要添加这个关键字,否则会报错。
delimiter //
drop procedure if exists StatisticStore;
CREATE PROCEDURE StatisticStore()
BEGIN
    --创建接收游标数据的变量
    declare c int;
    declare n varchar(20);
    --创建总数变量
    declare total int default 0;
    --创建结束标志变量
    declare done int default false;
    --创建游标
    declare cur cursor for select name,count from store where name = 'iphone';
    --指定游标循环结束时的返回值
    declare continue HANDLER for not found set done = true;
    --设置初始值
    set total = 0;
    --打开游标
    open cur;
    --开始循环游标里的数据
    read_loop:loop
    --根据游标当前指向的一条数据
    fetch cur into n,c;
    --判断游标的循环是否结束
    if done then
        leave read_loop;    --跳出游标循环
    end if;
    --获取一条数据时,将count值进行累加操作,这里可以做任意你想做的操作,
    set total = total   c;
    --结束游标循环
    end loop;
    --关闭游标
    close cur;

    --输出结果
    select total;
END;
--调用存储过程
call StatisticStore();

代码

初始化

初始化

fetch是取得游标当前针对的多少行,并将指针指向下一行,当游标已经针对性最后一行时继续实践会促成游标溢出。
利用loop循环游标时,他自己是不会督查是或不是到终极一条数据了,像下边代码这种写法,就能够导致死循环;

初始化

复制代码 代码如下:

游标的切实可行行使方案,MySQL游标的应用。复制代码 代码如下:

read_loop:loop
fetch cur into n,c;
set total = total c;
end loop;

drop procedure if exists useCursor //

drop procedure if exists useCursor //

drop procedure if exists useCursor //

在MySql中,形成游标溢出时会引发mysql预约义的NOT FOUND错误,所以在地点运用上边包车型地铁代码钦定了当引发not found错误时定义一个continue 的事件,钦点那几个事件产生时修改done变量的值。

成立 存款和储蓄进程 create

确立 存储过程 create

成立 存款和储蓄进程 create

declare continue HANDLER for not found set done = true; 

CREATE PROCEDURE useCursor()

复制代码 代码如下:

复制代码 代码如下:

据此在循环时抬高了上面那句代码:

BEGIN

CREATE PROCEDURE useCursor()

CREATE PROCEDURE useCursor()

--判断游标的循环是否结束
if done then
    leave read_loop;    --跳出游标循环
end if;

有的变量的概念 declare

BEGIN

BEGIN

一经done的值是true,就去世循环。继续施行上面包车型地铁代码。

declare tmpName varchar(20) default '' ;  declare allName varchar(255) default '' ;  declare cur1 CURSOR FOR SELECT name FROM test.level ;  

部分变量的概念 declare

有的变量的概念 declare

动用方法
游标有两种选择方法:第贰种便是地点的贯彻,使用loop循环;第三种艺术如下,使用while循环:

MySQL 不领会干什么用极度参与判别 ?

复制代码 代码如下:

复制代码 代码如下:

drop procedure if exists StatisticStore1;
CREATE PROCEDURE StatisticStore1()
BEGIN
    declare c int;
    declare n varchar(20);
    declare total int default 0;
    declare done int default false;
    declare cur cursor for select name,count from store where name = 'iphone';
    declare continue HANDLER for not found set done = true;
    set total = 0;
    open cur;
    fetch cur into n,c;
    while(not done) do
        set total = total   c;
        fetch cur into n,c;
    end while;

    close cur;
    select total;
END;

此请参谋官方文档 20.②.1一. 光标 光标

declare tmpName varchar(20) default '' ; 
declare allName varchar(255) default '' ; 
declare cur1 CURSOR FOR SELECT name FROM test.level ; 

declare tmpName varchar(20) default '' ; 
declare allName varchar(255) default '' ; 
declare cur1 CURSOR FOR SELECT name FROM test.level ; 

其两种艺术是选用repeat施行:

这把 MySQL 游标 异常后 捕捉

MySQL 游标 异常后 捕捉

MySQL 游标 异常后 捕捉

drop procedure if exists StatisticStore2;
CREATE PROCEDURE StatisticStore2()
BEGIN
    declare c int;
    declare n varchar(20);
    declare total int default 0;
    declare done int default false;
    declare cur cursor for select name,count from store where name = 'iphone';
    declare continue HANDLER for not found set done = true;
    set total = 0;
    open cur;
    repeat
    fetch cur into n,c;
    if not done then
        set total = total   c;
    end if;
    until done end repeat;
    close cur;
    select total;
END;

并设置 循环使用 变量 tmpname 为 null 跳出循环。

并设置 循环使用 变量 tmpname 为 null 跳出循环。

并安装 循环使用 变量 tmpname 为 null 跳出循环。

游标嵌套

declare CONTINUE HANDLER FOR SQLSTATE '02000' SET tmpname = null; 

复制代码 代码如下:

复制代码 代码如下:

在mysql中,种种begin end 块都是1个独立的scope区域,由于MySql中同2个error的风云只好定义一遍,假如多定义的话在编写翻译时会指示Duplicate handler declared in the same block。

开游标

declare CONTINUE HANDLER FOR SQLSTATE '02000' SET tmpname = null;

declare CONTINUE HANDLER FOR SQLSTATE '02000' SET tmpname = null;

drop procedure if exists StatisticStore3;
CREATE PROCEDURE StatisticStore3()
BEGIN
    declare _n varchar(20);
    declare done int default false;
    declare cur cursor for select name from store group by name;
    declare continue HANDLER for not found set done = true;
    open cur;
    read_loop:loop
    fetch cur into _n;
    if done then
        leave read_loop;
    end if;
    begin
        declare c int;
        declare n varchar(20);
        declare total int default 0;
        declare done int default false;
        declare cur cursor for select name,count from store where name = 'iphone';
        declare continue HANDLER for not found set done = true;
        set total = 0;
        open cur;
        iphone_loop:loop
        fetch cur into n,c;
        if done then
            leave iphone_loop;
        end if;
        set total = total   c;
        end loop;
        close cur;
        select _n,n,total;
    end;
    begin
            declare c int;
            declare n varchar(20);
            declare total int default 0;
            declare done int default false;
            declare cur cursor for select name,count from store where name = 'android';
            declare continue HANDLER for not found set done = true;
            set total = 0;
            open cur;
            android_loop:loop
            fetch cur into n,c;
            if done then
                leave android_loop;
            end if;
            set total = total   c;
            end loop;
            close cur;
        select _n,n,total;
    end;
    begin

    end;
    end loop;
    close cur;
END;

call StatisticStore3();

OPEN cur1;

开游标

开游标

转载:http://blog.csdn.net/liguo9860/article/details/50848216

本文由韦德国际发布于韦德国际1946手机版,转载请注明出处:游标的切实可行行使方案,MySQL游标的应用

关键词: 日记本 自己看看

phpmyadmin高端功用

开发phpmyadmin展现高端功用尚未完全设置有些机能未激活,phpmyadmin高端功效     标题:老师,展开phpmyadmin展现高档作...

详细>>

sql脚本查询日期时间段日子,mysql实现日期加时间

mysqlmysql CREATE TABLE PENALTIES - (PAYMENTNO INTEGER NOT NULL, - EmployeeNO INTEGER NOT NULL, - PAYMENT_DATE DATE NOT NULL, - AMOUNT DECIMAL(7,2) NOT...

详细>>

【韦德国际1946手机版】7中写多少并出口,pytho

#!/usr/bin/pythonimport MySQLdb# Open database connectiondb = MySQLdb.connect("localhost","testuser","test123","TESTDB" )# prepare a cursor object usin...

详细>>

mysql基础语句

和REPEAT和while语句分化,LOOP、LEAVE、ITERATE更像别的编制程序语言中的goto语句。LOOP要设定二个label钦定循环的初阶地点...

详细>>