sql >> Database teknologi >  >> RDS >> Mysql

MYSQL-lagrede procedure for opdateringsvariabler er 0

Problemet er, at procedureparameteren har samme navn som en kolonne i tabellerne. Når du henviser til propertyid i forespørgslerne bruger den kolonnen, ikke parameteren. Kolonne- og variabelnavne skelner mellem store og små bogstaver, så det gør ikke noget, at du har stavet et af dem PropertyID og den anden propertyId .

Brug et andet navn til parameteren, f.eks. p_propertyId

Desuden er der ikke behov for to forespørgsler, du kan gøre det i én med en 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

Bemærk, at du bruger LIMIT uden ORDER BY betyder, at den valgte række vil være uforudsigelig.




  1. Er der en bedste måde at undgå udførelse af processen mere end én gang i Oracle?

  2. MySQL - standardværdi for TIMESTAMP(3)

  3. Kod din første API med Node.js og Express:Tilslut en database

  4. Sådan gemmer du tom værdi som et heltalsfelt