下面是mysql 5.0的帮助文档的:
这个SELECT语法把选定的列直接存储到变量。因此,只有单一的行可以被取回。
SELECT id,data INTO x,y FROM test.t1 LIMIT 1
注意,用户变量名在MySQL 5.1中是对大小写不敏感的。请参阅9.3节,“用户变量”。
重要: SQL变量名不能和列名一样。如果SELECT ... INTO这样的SQL语句包含一个对列的参考,并包含一个与列相同名字的局部变量,MySQL当前把参考解释为一个变量的名字。例如,在下面的语句中,xname 被解释为到xname variable 的参考而不是到xname column的:
CREATE PROCEDURE sp1 (x VARCHAR(5))
BEGIN
DECLARE xname VARCHAR(5) DEFAULT 'bob'
DECLARE newname VARCHAR(5)
DECLARE xid INT
SELECT xname,id INTO newname,xid
FROM table1 WHERE xname = xname
SELECT newname
END
当这个程序被调用的时候,无论table.xname列的值是什么,变量newname将返回值‘bob’。
Mysql存储过程查询结果赋值到变量的方法
把查询结果赋值到变量,大部分情况下使用游标来完成,但是如果明确知道查询结果只有一行(例如统计记录的数量,某个字段求和等),其实可以使用set或into的方式来实现赋值。示例代码:
drop table if exists test_tbl
create table test_tbl (name varchar(20), status int(2))
insert into test_tbl values('abc', 1),('edf', 2),('xyz', 3)
drop procedure IF EXISTS pro_test_3
delimiter //
create procedure pro_test_3()
begin
DECLARE cnt INT DEFAULT 0
select count(*) into cnt from test_tbl
select cnt
-- 多个列的情况下似乎只能用 into 方式
select max(status), avg(status) into @max, @avg from test_tbl
select @max, @avg
end
delimiter
call pro_test_3()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)