对MySql server 5.6.17执行以下行给出了预期的结果:
SELECT @registered_countryCode := countrycode, @registered_gcmRegId := GCM_regid FROM slappdb.tb_register WHERE phonenumber = '123';
select @registered_countryCode, @registered_gcmRegId;
但是如果我在函数中包含这些行,我会在第一个:=运算符
中得到语法错误DECLARE registered_countryCode SMALLINT;
DECLARE registered_gcmRegId VARCHAR(255);
SELECT registered_countryCode := countrycode, registered_gcmRegId := GCM_regid FROM slappdb.tb_register WHERE phonenumber = extracted_phoneNumber;
我在这里做错了什么?在函数中使用带有:=运算符的用户定义变量似乎是一个问题。
答案 0 :(得分:2)
修改1 :
在函数中使用本地或会话/用户变量没有这样的限制。
使用INTO
将值复制到局部变量中。
更改:
SELECT registered_countryCode := countrycode,
registered_gcmRegId := GCM_regid
FROM slappdb.tb_register
WHERE phonenumber = extracted_phoneNumber;
致:
SELECT countrycode, GCM_regid
INTO registered_countryCode, registered_gcmRegId
FROM slappdb.tb_register
WHERE phonenumber = extracted_phoneNumber;
示例:
drop function if exists today;
delimiter //
create function today() returns date
begin
declare today date default null;
select now() into @_now;
select curdate() into today;
return today;
end;
//
delimiter ;
select today();
+------------+
| today |
+------------+
| 2014-05-19 |
+------------+
select @_now;
+---------------------+
| @_now |
+---------------------+
| 2014-05-19 14:04:24 |
+---------------------+
'='
和':='
用法之间存在差异。
'='
用于比较
':='
用于分配。
更改您的查询,如下所示:
SELECT @registered_countryCode := countrycode,
@registered_gcmRegId := GCM_regid
FROM slappdb.tb_register
WHERE phonenumber = '123';
select @registered_countryCode, @registered_gcmRegId;