簡體   English   中英

MySQL函數拋出語法錯誤

[英]MySQL function throws syntax error

我有一個查詢,該查詢使用給定的lat和lng和POINT來計算距離。

現在我想使其成為一個函數:

DELIMITER $$

CREATE FUNCTION CalculateDistance(geobreite double, geolaenge double, umkreis int) RETURNS INT READS SQL DATA

BEGIN

SET @ibk_laenge = geobreite;
SET @ibk_breite = geolaenge;
SET @umkreis = umkreis;
SET @breite_nord = @ibk_breite + (@umkreis / 111);
SET @breite_sued = @ibk_breite - (@umkreis / 111);
SET @laenge_west = @ibk_laenge - (@umkreis / ABS(COS(RADIANS(@ibk_breite))) * 111);
SET @laenge_ost = @ibk_laenge + (@umkreis / ABS(COS(RADIANS(@ibk_breite))) * 111);

SET @mp = CONCAT('MULTIPOINT(', @breite_sued , ' ', @laenge_west, ', ', @breite_nord, ' ', @laenge_ost, ')');

SET @quadrat = ENVELOPE(GEOMFROMTEXT(@mp));

RETURN 
    SELECT (
        FLOOR(
            SQRT(
                POW((@ibk_breite - sub.breite) * 111, 2) + 
                POW((@ibk_laenge - sub.laenge) * 111 * ABS(COS(RADIANS(@ibk_breite))),2)
            )
        )

    ) AS distanz

    FROM
        (
            SELECT Y(location) AS laenge, X(location) AS breite FROM meetings WHERE MBRCONTAINS(@quadrat, location)
        ) 
    AS sub;

END; $$ 

DELIMITER ;

但這會引發錯誤:

1064-您的SQL語法有誤; 查看與您的MySQL服務器版本相對應的手冊,以在附近使用正確的語法
'選擇 (
地板(
SQRT(
POW((@ i'在第18行

如果我用phpmyadmin執行查詢,它將正常工作。

要修復語法錯誤,請嘗試將SELECT查詢包裝在方括號中,例如-

RETURN (SELECT column1 FROM table WHERE id = 1);

下一個問題:函數必須返回一個標量值,如果SELECT查詢返回一些記錄,則會出現錯誤。

另外,您可以使用SELECT ... INTO查詢將值寫入變量,然后將其返回:

SELECT FLOOR(SQRT(...)) INTO @ret FROM ...;
RETURN @ret;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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