更新变量的MYSQL存储过程为0

时间:2017-01-12 22:42:05

标签: mysql stored-procedures

我在MYSQL数据库中有以下存储过程。存储过程得到lon,lat,而不是我在不同的数据库和表上进行更新。

DROP PROCEDURE IF EXISTS annuals.updateSalesFlorida;
CREATE DEFINER=`dddd`@`%` PROCEDURE `updateSales`(propertyId int)
BEGIN

   DECLARE lat   FLOAT;
    DECLARE lon FLOAT;


  SELECT  SitusLongitude,SitusLatitude
  INTO lon,lat
  FROM annuals.florida
  WHERE PropertyID=propertyId
  LIMIT 1 FOR UPDATE;

  UPDATE sales.florida
  SET
    `SitusLongitude` = lon,
    `SitusLatitude` = lat
  WHERE PROPERTYUNIQUEID=propertyId;

END;

每次运行存储过程时,SitusLongitudeSitusLatitude列都为0.我知道上一个选定的SitusLongitudeSitusLatitude具有实际值那里。由于某种原因,变量没有在lat,lon中设置。知道我错了什么吗?

1 个答案:

答案 0 :(得分:1)

问题是procedure参数与表中的列具有相同的名称。在查询中引用propertyid时,它使用的是列,而不是参数。列和变量名称不区分大小写,因此拼写其中一个PropertyID和另一个propertyId并不重要。

为参数使用其他名称,例如p_propertyId

此外,不需要两个查询,您可以使用JOIN进行查询。

UPDATE sales.florida AS s
CROSS JOIN (
    SELECT *
    FROM annuals.florida
    WHERE propertyId = p_propertyId
    LIMIT 1) AS a
SET s.SitusLongitude = a.SitusLongitude, s.SitusLatitude = a.SitusLatitude
WHERE s.PROPERTYUNIQUEID = p_propertyId

请注意,使用LIMIT而不使用ORDER BY意味着所选的行将无法预测。