存储过程之多项结果集游标处理

来源:互联网 发布:女士羽绒服品牌 知乎 编辑:程序博客网 时间:2024/05/16 08:12

mysql 存储过程 ,游标

(2012-06-27 14:15:30)
转载
标签:

宋体

存储过程

游标

结果集

变量

杂谈

分类:js
http://dev.mysql.com/doc/refman/5.1/zh/stored-procedures.html#cursors

以下的文章主要介绍的是MySQL游标的使用笔记,其可以用在存储过程的SQL语句,其主要类型主要有以下几种,以下就是对其详细介绍,相信如果你掌握了这项技术,会在以后的学习或是工作中带来很大的帮助。

1、 无返回结果语句,如:INSERT,UPDATE,DROP, DELETE等

2、 select语句返回单行变量并可传给本地变量(select ..into)

 

3、 返回多行结果集的select语句,并可使用MySQL游标循环处理

 

注意,存储过程返回的多行结果集,可以被客户端程序(如php)所接收,但要在一个存储过程中接收另一个存储过程的结果集是不可能的,一般解决办法是存入临时表供其它过程共用

4、 prepare语句

 

以下主要讲述游标及prepare部分

 

 

游标

 

定义

 

  1. DECLARE cursor_name CURSOR FOR SELECT_statement; 

 

游标操作

 

OPEN 打开游标

 

 

  1. OPEN cursor_name; 

 

FETCH获取游标当前指针的记录,并传给指定变量列表,注意变量数必须与MySQL游标返回的字段数一致,要获得多行数据,使用循环语句去执行FETCH

 

  1. FETCH cursor_name INTO variable list; 

 

 

CLOSE关闭游标

 

 

  1. CLOSE cursor_name 

注意:MySQL的游标是向前只读的,也就是说,你只能顺序地从开始往后读取结果集,不能从后往前,也不能直接跳到中间的记录.

一个完整的例子:

定义本地变量

 

  1. DECLARE varchar(128); 

 

定义游标

 

 

  1. DECLARE ordernumbers CURSOR 
  2. FOR  
  3. SELECT callee_name FROM account_tbl where acct_timeduration=10800
  4. DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_departments=1
  5. SET no_more_departments=0

 

 

打开游标

 

 

  1. OPEN ordernumbers; 

 

循环所有的行

 

 

  1. REPEAT  
  2. -- Get order number 
  3. FETCH ordernumbers INTO o; 
  4. update account set allMoneyallMoney=allMoney+72,lastMonthConsumelastMonthConsume=lastMonthConsume-72 where NumTg=@o; 

 

 

 

循环结束

 

 

  1. UNTIL no_more_departments 
  2. END REPEAT; 

 

 

关闭游标

 

  1. CLOSE ordernumbers; 

以上的相关内容就是对MySQL游标使用笔记的介绍,望你能有所收获。

 

变量定义:

declare variable_name [,variable_name...] datatype [defaultvalue];


其中,datatype为mysql的数据类型,如:int, float, date, varchar(length)

例:

declare l_int int unsigned default 4000000; declare l_numericnumeric(8,2) default 9.95; declare l_date date default'1999-12-31'; declare l_datetime datetime default '1999-12-3123:59:59'; declare l_varchar varchar(255) default 'this will not bepadded';

变量赋值

set 变量名 = 表达式值 [,variable_name = expression ...]
 

参数

mysql存储过程的参数用在存储过程的定义,共有三种参数类型,in,out,inout

create procedure|function([[in |out |inout ] 参数名 数据类形...])

 

in 输入参数

表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值

out 输出参数

该值可在存储过程内部被改变,并可返回

inout 输入输出参数

调用时指定,并且可被改变和返回

 


建存储过程:

 

语法:

create procedure p()

begin

 

end  
create procedure productpricing()

begin

    selectavg(pro_price) as priceaverage

   from products;

end;

# begin…end之间是存储过程的主体定义

# mysql的分界符是分号(;) 

                        

调用存储过程的方法是:

 

# call加上过程名以及一个括号

# 例如调用上面定义的存储过程

call productpricing();

原创粉丝点击