:=运算符不使用mysql函数内的用户定义变量

时间:2014-05-19 07:32:24

标签: mysql

对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;

我在这里做错了什么?在函数中使用带有:=运算符的用户定义变量似乎是一个问题。

1 个答案:

答案 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;