簡體   English   中英

MYSQL存儲過程的更新變量為0

[英]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;

每次運行存儲過程時, SitusLongitudeSitusLatitude列均為0。我知道,先前選擇的SitusLongitudeSitusLatitude在其中具有實際值。 由於某些原因,未在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM