码迷,mamicode.com
首页 > 数据库 > 详细

mysql存储过程问题

时间:2016-03-08 00:31:31      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:

背景

  最近做到搜索功能,很是头疼。mysql全文索引折腾的不轻,最后也没怎么明白。然后就着顺便看了一看函数和存储过程编程。本来是上过数据库这门课,但是老师讲的终究是浅显,用起来才发现每一门课都像一座冰山,知道的只是一角。。。。慢慢摸索吧。于此总结一下存储过程编写过程遇到的问题。

问题1:加上@符号的变量是什么?

  mysql中前面有@符的变量,形如:@a , 表示的是一个全局变量,一个过程中进行定义赋值,其他过程可以直接使用。相对来说对于普通的变量,则属于局部变量,只能在本身过程中使用。

问题2:过程中只能返回一个结果集,如果想返回多个结果集怎么办?  首先说一下返回单个结果集:

delimiter //
create procedure `test`(out str varchar(20))
begin
    select bookName into str from books limit 1;
end //
delimiter ;

通过select into 可以将单个结果集返回给变量,但是对于多个结果集是行不通的。只能使用游标

有了游标,这问题就多了。。。。

游标的定义

 

CREATE PROCEDURE `test` ()
BEGIN

-- 需要定义接收游标数据的变量,类型于游标内容类型一致
  DECLARE a CHAR(10);

  -- 遍历数据结束标志
  DECLARE ending INT DEFAULT FALSE;

  -- 游标
  DECLARE cur CURSOR FOR SELECT i FROM tablename;

  -- 将结束标志绑定到游标
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET ending = TRUE;

  -- 打开游标
  OPEN cur;

   --使用游标代码


   --关闭游标        
   CLOSE cur;
END

 

值得注意的一点是其中的declare顺序不可改变,即其他变量声明放在最前,游标及结束绑定的声明要放在后边,而且声明前不可有其他类型语句,否则会有符号错误

游标使用的方法:

 

REPEAT
 --游标储存一列
    FETCH cur INTO a;

    --游标储存多列  
    FETCH cur INTO a,b·····;

UNTIL ending
END REPEAT ;

 

 

 

 

关于结束标志:

  结束标志是先通过一个FETCH     INTO  ,然后判断游标中是否还存在内容,如果没有内容就会执行 SET ending = TRUE; (定义代码中的),然后通过ending的判断即可跳出循环。

 

 

  

 

  

 

mysql存储过程问题

标签:

原文地址:http://www.cnblogs.com/onyourway/p/5252467.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!