Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
:=运算符不使用mysql函数内的用户定义变量_Mysql - Fatal编程技术网

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

:=运算符不使用mysql函数内的用户定义变量,mysql,Mysql,对MySql服务器5.6.17执行以下行可以得到预期的结果: SELECT @registered_countryCode := countrycode, @registered_gcmRegId := GCM_regid FROM slappdb.tb_register WHERE phonenumber = '123'; select @registered_countryCode, @registered_gcmRegId; 但是如果我在函数中包含这些行,我会在第一个:=运算符处得到一

对MySql服务器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

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

你的答案是绝对正确的,经过一些实验后我意识到了这一点。不幸的是,就在你回答之前,我稍微改变了我的问题。很抱歉。知道我为什么不能在函数中使用:=吗?