[英]MYSQL stored procedure for update variables are 0
我在MYSQL數據庫中具有以下存儲過程。 存儲過程變得很慢,然后我要在不同的數據庫和表上進行更新。
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
和SitusLatitude
在其中具有實際值。 由於某些原因,未在lat,lon中設置變量。 知道我錯了嗎?
問題在於過程參數的名稱與表中的列相同。 在查詢中引用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
請注意,在不使用ORDER BY
情況下使用LIMIT
意味着所選行將不可預測。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.