CREATE OR REPLACE FUNCTION FUNC_DISTANCE (LAT1 NUMBER,LNG1 NUMBER,LAT2 NUMBER,LNG2 NUMBER) RETURN NUMBER
AS
EARTH_RADIUS NUMBER := 6378.137; --地球半径
RADLAT1 NUMBER;
RADLAT2 NUMBER;
A NUMBER;
B NUMBER;
S NUMBER;
RET NUMBER;
FUNCTION RAD(D NUMBER) RETURN NUMBER
AS
RET NUMBER;
BEGIN
RET := D*3.1415926535897931/180;
RETURN RET;
END;
BEGIN
RADLAT1 := RAD(LAT1);
RADLAT2 := RAD(LAT2);
A := RADLAT1 - RADLAT2;
B := RAD(LNG1) - RAD(LNG2);
S := 2 * ASIN(SQRT(POWER(SIN(A/2),2) + COS(RADLAT1)*COS(RADLAT2)*POWER(SIN(B/2),2)));
RET := S * EARTH_RADIUS;
RETURN RET;
END;
/