• Mysql存储过程中使用cursor


    一、表
    学生表
    CREATE TABLE `t_student` (
       `stuNum` int(11) NOT NULL auto_increment,
       `stuName` varchar(20) default NULL,
       `birthday` date default NULL,
       PRIMARY KEY  (`stuNum`)
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    学生分数表
    CREATE TABLE `t_stu_score` (
       `id` int(11) NOT NULL auto_increment,
       `stuNum` int(11) default NULL,
       `score` decimal(6,2) default NULL,
       PRIMARY KEY  (`id`),
       KEY `FK_t_stu_score` (`stuNum`),
       CONSTRAINT `FK_t_stu_score` FOREIGN KEY (`stuNum`) REFERENCES `t_student` (`stuNum`)
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    学生具体表
    CREATE TABLE `t_stu_detail` (
       `id` int(11) NOT NULL auto_increment,
       `stuName` varchar(20) default NULL,
       `score` decimal(6,2) default NULL,
       PRIMARY KEY  (`id`)
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    将t_Student和t_stu_score表中满足一定条件的数据插入到t_stu_detail中。


    二、过程
    DELIMITER &&
     CREATE PROCEDURE proc_AddStuDetail( IN p_score DECIMAL(6,2) )
      BEGIN
    DECLARE vstuNum INT;
    DECLARE vstuName VARCHAR(20);
    DECLARE vbirthday DATE;
    DECLARE vscore DECIMAL(6,2);
    DECLARE done INT;

    -- 定义游标
    DECLARE stuCursor CURSOR
    FOR
    SELECT stuNum,stuName,birthday FROM t_Student;

    -- 定义结束标记
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

    -- 打开游标
    OPEN stuCursor;

    -- 循环
    stuLoop:LOOP
    -- 取游标中的数据
    FETCH stuCursor INTO vstuNum,vstuName,vbirthday;
    IF done = 1 THEN
    LEAVE stuLoop;
    END IF;

    IF DATE(vbirthday) >= '1990-03-01' THEN
    SELECT score INTO vscore FROM t_stu_score WHERE stuNum = vstuNum;
    IF vscore >= p_score THEN
    INSERT INTO t_stu_detail VALUES(NULL,vstuNum,vscore);
    END IF;
    END IF;
    END LOOP stuLoop;

    -- 关闭游标
    CLOSE stuCursor;
      END
    &&
    DELIMITER ;

    三、调用过程
    CALL proc_AddStuDetail(86);
  • 相关阅读:
    Telnet登陆网络设备执行命令脚本
    Python发送飞书消息
    百度贴吧爬虫
    notpadd++ 颜色
    git 快速解决冲突 工具
    go strconv模块
    Day 03 strings 和 strconv 的使用, 时间和日期类型 流程控制 函数
    go 的flag用法
    Python schedules.crontab方法代码示例 https://vimsky.com/examples/detail/pythonmethodcelery.schedules.crontab.html
    go bufio和fmt.Scanf()用法
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7236291.html
Copyright © 2020-2023  润新知