2011-05-05 155 views
0

當我嘗試在此過程中將FLOATS轉換爲CHARS時,我在數據庫中獲得了空值。位置是一個地理空間領域。我究竟做錯了什麼?爲什麼我的CAST返回null/Nothing?

CREATE DEFINER=`me`@`%` PROCEDURE `UpdateLocationByObjectId`(IN objectId INT, 
              IN latitude FLOAT, 
              IN longitude FLOAT) 
BEGIN 
    UPDATE Positions P 
    JOIN Objects O ON P.Id = O.PositionId 
     SET P.Location = GeomFromText('Point(' + CAST(latitude AS CHAR(10)) + ' ' + CAST(longitude AS CHAR(10)) +')') 
     WHERE O.ObjectId = objectId; 
END 

如果我使用這個作爲測試,它工作正常。

CREATE DEFINER=`me`@`%` PROCEDURE `UpdateLocationByObjectId`(IN objectId INT, 
              IN latitude FLOAT, 
              IN longitude FLOAT) 
BEGIN 
    UPDATE Positions P 
    JOIN Objects O ON P.Id = O.PositionId 
     SET P.Location = GeomFromText('Point(10 10')') 
     WHERE O.ObjectId = objectId; 
END 

回答

1

改變這一行

SET P.Location = GeomFromText('Point(' + CAST(latitude AS CHAR(10)) + ' ' 
             + CAST(longitude AS CHAR(10)) +')') 

SET P.Location = GeomFromText(concat('Point(' , CAST(latitude AS CHAR(10)) , ' ' 
               , CAST(longitude AS CHAR(10)) ,')')) 

+操作者將您的文本值( '10' + '10')= 20
所以中央部評估爲'Point('+ 20 +')',將不能被讀取的文本添加爲​​數字+數字評估爲NULL。

只有concat函數可以連接字符串。 實際上這個代碼也可以正常工作:

SET P.Location = GeomFromText(concat('Point(', latitude, ' ', longitude,')')) 
+0

謝謝你剛剛算出來的! – 2011-05-05 21:07:44