您的位置:首页 > 其它

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

2012-12-12 11:26 204 查看

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部分

游标

定义

DECLARE cursor_name CURSOR FOR SELECT_statement;

游标操作

OPEN 打开游标

OPEN cursor_name;

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

FETCH cursor_name INTO variable list;

CLOSE关闭游标

CLOSE cursor_name ;

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

一个完整的例子:

定义本地变量

DECLARE o varchar(128);

定义游标

DECLARE ordernumbers CURSOR

FOR

SELECT callee_name FROM account_tbl where acct_timeduration=10800;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_departments=1;

SET no_more_departments=0;

打开游标

OPEN ordernumbers;

循环所有的行

REPEAT

-- Get order number

FETCH ordernumbers INTO o;

update account set allMoneyallMoney=allMoney+72,lastMonthConsumelastMonthConsume=lastMonthConsume-72 where NumTg=@o;

循环结束

UNTIL no_more_departments

END REPEAT;

关闭游标

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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: