• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

mysql 存储过程中使用游标中使用临时表可以代替数组效果_mysql

mysql 搞代码 7年前 (2018-06-09) 101次浏览 已收录 0个评论

mysql 存储过程中使用游标中使用临时表可以替代数组效果

mysql不支持数组。但有时候需要组合几张表的数据,在存储过程中,经过比较复杂的运算获取结果直接输出给调用方,比如符合条件的几张表的某些字段的组合计算,mysql临时表可以解决这个问题.临时表:只有在当前连接情况下, TEMPORARY 表才是可见的。当连接关闭时, TEMPORARY 表被自动取消。必须拥有 create temporary table 权限,才能创建临时表。可以通过指定 engine = memory; 来指定创建内存临时表。

先建立要用的数据表及数据:

drop table if exists  person; create table `person` (   `id` int(11)primary key NOT NULL DEFAULT '0',   `age` int(11) DEFAULT NULL,   `name` varchar(225) not null ) engine=innodb default charset=utf8; insert into person values(1,1,'zhangshan'),(2,2,'lisi'),(3,3,'lst'),(4,4,'jon'),(5,5,'test');

临时表支持主键、索引指定。在连接非临时表查询可以利用指定主键或索引来提升性能。存储过程语句及游标和临时表综合实例:

drop procedure if exists sp_test_tt; -- 判断存储过程函数是否存在如果是删除 delimiter ;; create procedure  sp_test_tt()   begin            create temporary table if not exists tmp   -- 如果表已存在,则使用关键词 if not exists 可以防止发生错误          (              id varchar(255) ,              name varchar(50),              age varchar(500)          ) engine = memory;            begin           declare ids int; -- 接受查询变量         declare names varchar(225); -- 接受查询变量         declare done int default false; -- 跳出标识         declare ages int(11); -- 接受查询变量         declare cur cursor for select id from person; -- 声明游标         declare continue handler for not FOUND set done = true; -- 循环结束设置跳出标识         open cur; -- 开始游标         LOOP_LABLE:loop -- 循环             FETCH cur INTO ids;             select name into names from person where id=ids;             select age into ages from person where id=ids;             insert into tmp(id,name,age) value(ids,names,ages);             if done THEN  -- 判断是否继续循环如果done等于true离开循环                 LEAVE LOOP_LABLE; -- 离开循环             END IF;             end LOOP; -- 结束循环         CLOSE cur; -- 关闭游标      select * from tmp; -- 查询临时表          end;            truncate TABLE tmp;   -- 使用 truncate TABLE 的方式来提升性能 end;   ;; delimiter ;;

执行存储过程:

call sp_test_tt();

欢迎大家阅读《mysql 存储过程中使用游标中使用临时表可以代替数组效果_mysql》,跪求各位点评,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:mysql 存储过程中使用游标中使用临时表可以代替数组效果_mysql
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址