早上有人求助,我写出答案如下,觉得这个问题还算有代表性:
不过MYSQL的预处理好像得用动态变量,静态的不认。老出错。
------------------
表[A],2个字段,name,num,
数据为:
name num
tom 3
jerry 2
jessic 2
lily 1

希望通过一段SQL语句得到以下的数据集:
tom
tom
tom
jerry
jerry
jessic
jessic
lily

就是根据NUM的值,重复几次NAME。

--------------------------------------
贴出完成版
create table test(name varchar(64),num int(11));
insert into test values('tom',3),('jerry',2),('jessic',2),('lily',1);
---------------------------
DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`sp_test`$$

CREATE PROCEDURE `test`.`sp_test`()
BEGIN
declare cnt int(11);
declare i int(11);
declare j int(11);
  create temporary table num (name varchar(64),num int(11));
  select count(*) from test where 1 = 1 into cnt;
  set i = 0;
  loop1:loop
    set @query1 = concat('select name,num from test limit ',i,',1 into @name,@num1');
    prepare stmt1 from @query1;
    execute stmt1;
    deallocate prepare stmt1;
    set j = 1;
    loop2:loop
      set @query2 = 'insert into num values(?,?)';
      prepare stmt2 from @query2;
      execute stmt2 using @name,@num1;
      deallocate prepare stmt2;    
      set j = j + 1;
      if j > @num1 then
        leave loop2;
      end if;
    end loop loop2;
    set i = i + 1;
    if i > cnt -1 then
      leave loop1;
    end if;
  end loop loop1;
  select name  from num;   
    
END$$

DELIMITER ;
------------------
call sp_test();

query result(8 records)
name   
tom    
tom    
tom    
jerry  
jerry   
jessic   
jessic   
lily

转载于:https://blog.51cto.com/yueliangdao0608/81398

一个存储过程实现(问题答案)相关推荐

  1. 1 创建一个存储过程,以及对存储过程的调用 MySQL

    1  首先创建一张tb1表  sql语句如下 CREATE TABLE `tb1` (   `Id` int(11) NOT NULL AUTO_INCREMENT,   `age` int(11) ...

  2. 创建一个存储过程,返回指定员工的姓名和薪水

    /* 创建一个存储过程,返回指定员工的姓名和薪水 */ create or replace PROCEDURE queryEmp1(eno in number,empname out VARCHAR2 ...

  3. 使用oracle 的 PL/Sql 定时执行一个存储过程

    /* 使用oracle 的 PL/Sql 定时执行一个存储过程 测试目的:在表 tab 中间隔一分钟插入一条数据 实现方案: 1.通过 oracle 中 dbms_job 完成存储过程的定时调用 2. ...

  4. 对一个存储过程语法的解读

    create or replace package body SY_USER_PKG1 is//创建一个存储过程的声明,在package body就是存储过程的实现体所放的包,SY_USER_PKG1 ...

  5. 定义一个存储过程,以员工工号为参数,修改该员工的工资,若该员工属于10部门,则工资增加150 若属于20号部门,工资加200,若属于30部门,工资加250 若其它部门,则加300

    注:使用的是Oracle的实例数据库中的scott用户 定义一个存储过程,以员工工号为参数,修改该员工的工资,若该员工属于10部门,则工资增加150 若属于20号部门,工资加200,若属于30部门,工 ...

  6. mysql定时任务如何每天0点跑_mysql定时任务,每天的零点执行一个存储过程

    1 前言 利用navicat工具来写存储过程及定时执行,此文章是按照自身经验总结的,仅作为记录使用. 2 步骤 2.1 新建过程 2.2 在函数体写你需要执行的代码 CREATE DEFINER=`r ...

  7. mysql怎么让一个存储过程定时执行

    查看event是否开启: show variables like '%sche%';  将事件计划开启: set global event_scheduler=1;  关闭事件任务: alter ev ...

  8. 在存储过程中如何使用另一个存储过程返回的结果集

    1.创建一个临时表#tmp,表结构与目标存储过程procedure_name的返回结果集兼容(兼容即可,不必相同). CREATE TABLE #tmp( [columns_list] ) 2.执行存 ...

  9. mysql 让一个存储过程定时作业的代码(转)

    1.在mysql 中建立一个数据库 test1 语句:create database test1 2.创建表examinfo create table examinfo( id int auto_in ...

  10. mysql怎么创建自动作业_mysql 让一个存储过程定时作业的代码

    1.在mysql 中建立一个数据库 test1 语句:create database test1 2.创建表examinfo create table examinfo( id int auto_in ...

最新文章

  1. 大数据笔记2019.5.6
  2. Mybatis: 返回不同实体(对象数组)
  3. Apache Wicket:记住我的功能
  4. 数据预处理和特征工程
  5. springboot2.0 fastjson 日期格式化不生效解决
  6. 终于有人讲明白了,原来这才是全球低时延一张网技术
  7. ubuntu12.04 启动mysql_ubuntu 12.04 mysql 改utf8 启动不了
  8. 微信 html关闭当前页
  9. html5-微格式-时间的格式
  10. JEECG支付服务窗平台与服务窗接口对接文档
  11. python实现ncm转mp3_滚动歌词制作 之 ncm格式转mp3
  12. 微信跳转手机默认浏览器实现微信扫一扫功能扫码直接下载apk
  13. html5新浪微博代码,JS实现的新浪微博大厅文字内容滚动效果代码
  14. 程序员怎么做可以安全通过试用期
  15. ubuntu桌面幻灯片_如何在Ubuntu中创建墙纸幻灯片
  16. 大话nbu二(netbackup的基本配置)
  17. flask-sqlalchemy一对多 知了传课 flask web全栈开发实战 黄勇
  18. java 时间轮算法_时间轮算法解析(Netty HashedWheelTimer源码解读)
  19. 数字世界里的足球——数研院探索多智能体足球AI并取得新突破
  20. 逆向分析HyperSnap 7 专业版完成注册

热门文章

  1. android 打包问题,Android离线打包常见问题
  2. php快速排序空间复杂度,PHP 算法基础----时间复杂度和空间复杂度(转载)
  3. java 象限分析_用四种象限分析你(未来的人生走向)
  4. 力扣-572. 另一棵树的子树
  5. Kotlin基础学习第5章—表达式
  6. Android Spinner(下拉菜单)常用属性与点击事件获取值
  7. RK3288_Android7.1的gpio按键驱动浅析
  8. Android修改了sdk里面的apk编译push进机器不生效问题
  9. C#_基础_部分类partial(十八)
  10. Writing A Threadpool in Rust