怎么在Mysql存储过程中利用游标循环对临时表进行读取

  介绍

这期内容当中小编将会给大家带来有关怎么在Mysql存储过程中利用游标循环对临时表进行读取,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

游标

游标(光标)是用于查看或者处理结果集中的数据的一种方法。游标提供了在结果集中一次一行或者多行前进或向后浏览数据的能力。

游标的使用方式

定义游标:声明游标名称指针表;(表也可以是选择出来的结果集)
打开游标:开放游标名称,
从结果集获取数据到变量:获取游标名称field1, field2;
执行语句:执行需要处理数据的语句
关闭游标:近游标名称;

开始   #,才能声明自定义变量   declare 才能c_stgId 智力;   declare 才能;c_stgName  varchar (50);   #,才能声明游标结束变量   declare 才能done  INT  DEFAULT  0;      #,才能声明游标,cr 以及游标读取到结果集最后的处理方式   declare 才能cr  cursor  for  select 名字,StgId 得到StgSummary  limit  3;   declare 才能continue  handler  for  not  found  set  done =, 1;      #,才能打开游标   open 才能;铬;      #,才能循环   readLoop才能:循环   ,,,#,获取游标中值并赋值给变量   ,,,fetch  cr  into  c_stgName, c_stgId;   ,,,#,判断游标是否到底,若到底则退出游标   ,,,#,需要注意这个判断   ,,,IF  done =1,然后   ,,,,,LEAVE  readLoop;,   ,,,最终获得如果,,   ,,,,   ,,,,,SELECT  c_stgName, c_stgId;   ,,,,   最终获得才能LOOP  readLoop;   ,,,,关闭游标   close 才能;铬;   结束

声明变量声明语句注意点:

<李>

声明语句通常用来声明本地变量,游标,条件或者处理

<李>

声明语句只允许出现在开始…结尾语句中而且必须出现在第一行

<李>

声明的顺序也有要求,通常是先声明本地变量,再是游标,然后是条件和处理程序

自定义变量命名注意点:

自定义变量的名称不要和游标的结果集字段名一样。若相同会出现游标给变量赋值无效的情况。

临时表

临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间,因此在不同的连接中可以创建同名的临时表,并且操作属于本连接的临时表。
与普通创建语句的区别就是使用临时关键字

CREATE  TEMPORARY  TABLE  StgSummary (   ,Name  VARCHAR (50), NOT 空,   ,StgId  INT  NOT  NULL  DEFAULT  0   );

临时表使用限制

<李>

在同一个查询语句中,只能查找一次临时表同。样在一个存储过程中也不能多次查询临时表。但是不同的临时表可以在一个查询中使用。

<李>

不能用重命名来重命名一个临时表,但是可以用ALTER TABLE代替

ALTER  TABLE  orig_name  RENAME  new_name; <李>

临时表使用完以后需要主动放弃掉

DROP  TEMPORARY  TABLE  IF  EXISTS  StgTempTable;

存储过程中使用游标循环读取临时表数据

开始   # #,创建临时表   CREATE  TEMPORARY  TABLE  if  not  exists  StgSummary (   ,Name  VARCHAR (50), NOT 空,   ,StgId  INT  NOT  NULL  DEFAULT  0   );   TRUNCATE  TABLE  StgSummary;      # #,新增临时表数据   INSERT  INTO  StgSummary(名称、StgId)   select  & # 39;临时数据& # 39;1      开始      #,自定义变量   declare  c_stgId  int;   declare  c_stgName  varchar (50);   declare  done  INT  DEFAULT  0;      declare  cr  cursor  for  select 名字,StgId 得到StgSummary  ORDER  BY  StgId  desc  LIMIT  3;   declare  continue  handler  for  not  found  set  done =, 1;      ——,打开游标   open 铬;   testLoop:循环   ——,获取结果   fetch  cr  into  c_stgName c_stgId;   IF  done =1,然后   LEAVE  testLoop,   最终获得;如果,      ,,   SELECT 才能c_stgName c_stgId;      最终获得LOOP  testLoop;   ——,关闭游标   close 铬;      结束;   DROP  TEMPORARY  TABLE  IF  EXISTS  StgSummary;   结束;

怎么在Mysql存储过程中利用游标循环对临时表进行读取