`

合并评论 ------- MySql 游标存储过程

阅读更多

book内容:

 

 

id

name

appraisal

1

max

A

2

max

B

3

kelongmao

C

4

zero

D

5

kelongmao

E

6

max

F

7

zero

G

8

kelongmao

H

9

zero

I

 

book2 内容:

 

 

id

name

appraisal

1

max

ABF

2

zero

DG

3

kelongmao

CEH

 

create table book(

   id int primary key,

  name varchar(20),

  appraisal varchar(20)

);

 

 

create table book2(

   id int primary key,

  name varchar(20),

  appraisal varchar(20)

);

 

 

insert into book values(1, 'max', 'A');

insert into book values(2, 'max', 'B');

insert into book values(3, 'kelongmao', 'C');

insert into book values(4, 'zero', 'D');

insert into book values(5, kelongmao, 'E');

insert into book values(6, 'max', 'F');

insert into book values(7, 'zero', 'G');

insert into book values(8, 'kelongmao', 'H');

insert into book values(9, 'zero', 'I');

 

 

 

用Sql实现,将book的评论合并,填写到book2表中:

 

实现方案: mysql  存储过程

测试环境: mysql   数据库

 

存储过程如下:

 

DELIMITER $$
DROP PROCEDURE IF EXISTS getUserInfo $$
CREATE PROCEDURE getUserInfo(count int) 

BEGIN
declare _id1  int;
declare _name1  varchar(20);
declare _app1  varchar(20);
declare _name2   varchar(20);
declare _app2  varchar(20);
declare _app3  varchar(20);
declare _app4  varchar(20);
 
DECLARE rs_cursor CURSOR FOR select * from book order by name; 
open rs_cursor;  
cursor_loop:loop
   FETCH rs_cursor into _id1, _name1, _app1; 
  set count = count - 1; 
   if _name2 is NULl then    
   set _name2 = _name1;
   set _app2 = _app1;
   set _app3 =  _app1 ;
   elseif  STRCMP(_name2 , _name1)<>0 then    
  insert into book2 values(_id1, _name2,  _app3);
  set _name2 = _name1;
  set _app3 =  _app1 ; 
  else                     
  set _app3 = concat(  _app1,_app3  ); 
   end if;
 if count < 1 then  
insert into book2 values(_id1, _name2,  _app3);
 end if;
end loop cursor_loop;
close rs_cursor;  
END$$
DELIMITER ;
调用存储过程如下:
call getUserInfo(9);
9 的的来:
select count(*) from book;  --获得book中的书目条数
备注:
mysql  中调用存储过程的语句: call, 而不是exec
sql中打印数据的语句:  select
赋值语句: set
执行.sql脚本:  source d:\test.sql
 
 
 
 
分享到:
评论

相关推荐

    高性能MySQL(第3版).part2

    7.4.1存储过程和函数278 7.4.2触发器279 7.4.3事件281 7.4.4在存储程序中保留注释283 7.5游标283 7.6绑定变量284 7.6.1绑定变量的优化286 7.6.2SQL接口的绑定变量286 7.6.3绑定变量的限制288 7.7用户自定义...

    计算机二级mysql数据库程序设计练习题(二).docx

    可以对属性列、数据表、视图、存储过程和存储函数授权 10.MySQL成功安装后,在系统中默认建立的用户个数是 ______。 A.0 B.1 C.2 D.3 11.数据库管理系统提供的数据控制功能包括 ______。 计算机二级mysql数据库程序...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    产品安装过程中将会出现以上2个界面 9. 步骤8/8:完成安装  卸载Oracle 1. 在运行services.msc打开服务,停止Oracle的所有服务。 2. oracle11G自带一个卸载批处理\app\Administrator\product\11.2.0\dbhome_1\...

    SQL培训第一期

    用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 1.9.2 准备 create table t_user ( username varchar2(20), password varchar2(20) ); create table t_user_temp ( username varchar...

    php网络开发完全手册

    16.3.2 存储过程的创建与调用 264 16.3.3 存储过程的参数 265 16.3.4 复合语句 267 16.3.5 变量 268 16.3.6 条件语句 269 16.3.7 循环语句 271 16.3.8 游标 273 16.3.9 存储过程的删除 275 16.4 触发器的设计 275 ...

    Linux操作系统基础教程

    安装过程..........................................................................................................................5 第二讲 Linux基础进阶..................................................

    Java面试宝典2020修订版V1.0.1.doc

    35、MySQL、SqlServer、oracle写出字符存储、字符串转时间 52 36、update语句可以修改结果集中的数据吗? 53 37、oracle如何设置主键自动增长? 53 38、表连接、子查询的区别是什么?它们可以相互转化吗?你倾向于用...

    Python Cookbook

    7.10 在MySQL数据库中储存BLOB 295 7.11 在PostgreSQL中储存BLOB 296 7.12 在SQLite中储存BLOB 298 7.13 生成一个字典将字段名映射为列号 300 7.14 利用dtuple实现对查询结果的灵活访问 302 7.15 打印数据库...

Global site tag (gtag.js) - Google Analytics