更新变量的MYSQL存储过程为0
我在MYSQL数据库中有以下存储过程。存储过程得到lon,lat,然后我在另一个数据库和表上进行更新更新变量的MYSQL存储过程为0,mysql,stored-procedures,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
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;
每次运行存储过程时,
SitusLongitude
和SitusLatitude
列都是0。我知道前面选择的SitusLongitude
和situslation
中有实际值。由于某些原因,变量未在lat、lon中设置。知道我错了什么吗?问题是过程参数与表中的一列同名。在查询中引用propertyid
时,它使用的是列,而不是参数。列和变量名不区分大小写,因此拼写其中一个PropertyID
和另一个PropertyID
并不重要
为参数使用不同的名称,例如p_propertyId
另外,不需要两个查询,您可以使用连接在一个查询中完成
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
,则表示所选行将不可预测。可能会出现任意数量的错误。您没有向我们显示您的表、数据、输入或输出,但您希望我们接受您的断言,即您的代码同时正确和不正确。请提供一个,理想情况下使用。为什么要作为两个查询来执行此操作?只需使用JOIN
进行一次UPDATE
查询即可。不确定如何进行,我认为上述操作会更简单。