Пользовательская функция MySQL — формула гаверсина

У меня есть следующий код:

CREATE FUNCTION CalculateDistance
    (`Code1` VARCHAR(8), `Code2` VARCHAR(8)) RETURNS FLOAT
BEGIN
    DECLARE Code1Lat FLOAT;
    DECLARE Code1Long FLOAT;
    DECLARE Code2Lat FLOAT;
    DECLARE Code2Long FLOAT;
    DECLARE DLat FLOAT;
    DECLARE DLong FLOAT;
    DECLARE A FLOAT;
    DECLARE C FLOAT;
    Code1Lat = SELECT `lat` FROM `vb_postcodes` WHERE `code` LIKE Code1;
    Code1Long = SELECT `lng` FROM `vb_postcodes` WHERE `code` LIKE Code1;
    Code2Lat = SELECT `lat` FROM `vb_postcodes` WHERE `code` LIKE Code2;
    Code2Long = SELECT `lng` FROM `vb_postcodes` WHERE `code` LIKE Code2;
    DLat = (Code2Lat - Code1Lat) * PI() / 180;
    DLong = (Code2Long - Code1Long) * PI() / 180;
    Code1Lat = Code1Lat * PI() / 180;
    Code2Lat = Code2Lat * PI() / 180;
    A = (SIN(DLat / 2) * SIN(DLat / 2)) + (SIN(DLong / 2) * SIN(DLong / 2)) * COS(Lat1)    * COS(Lat2);
    C = 2 * ATAN2(SQRT(A), SQRT(1 - A));
    Return (3960 * C);
END

Это формула гаверсинуса, которая рассчитает расстояние между двумя координатами. Координаты хранятся в таблице vb_postcodes с атрибутами: код, долгота и широта. Когда я пытаюсь выполнить код, я получаю синтаксическую ошибку.

Пожалуйста, извините за мои проблемы, это первый раз, когда я делаю пользовательскую функцию.


person user2879284    schedule 15.01.2014    source источник
comment
Пожалуйста, дайте нам знать, какую именно ошибку вы получаете?   -  person Pawan    schedule 15.01.2014
comment
@Pawan - Кажется, что-то с оператором declare, ошибка: # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с '' в строке 4   -  person user2879284    schedule 15.01.2014
comment
Возможный дубликат stackoverflow.com/questions/6740932/   -  person Pawan    schedule 15.01.2014
comment
@Pawan - Мне помогло, спасибо! Единственная проблема сейчас в том, что у меня есть другая ошибка - # 1064 - у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'SELECT lat FROM vb_postcodes WHERE code LIKE Code1; SET Code1Long = S' в строке 12   -  person user2879284    schedule 15.01.2014
comment
вместо code LIKE Code1; напишите WHERE 'code' LIKE CONCAT(%,Code1,%) и сделайте это во всех местах во всех 4 запросах.   -  person Pawan    schedule 15.01.2014