標籤:
為了防止分號產生的中途輸出,自己定義一個 分隔字元,這裡仿照mysql官方的例子:使用兩個貨幣符號 $$ 作為分割符號,下面這段代碼就是建立一個自訂mysql函數的原型了,可以在這個基礎上修改,這樣,建立函數就不會產生很多錯誤了.
set global log_bin_trust_function_creators = 1; -- 開啟bin_log 複製 函數建立
DROP FUNCTION IF EXISTS hello; -- 刪掉已經存在的
DELIMITER $$ -- 定義分隔字元,必須要有,可以不是$$
CREATE FUNCTION hello( s varchar(30)) -- 多個參數用,分割 參數的類型必須是mysql列存在的類型
RETURNS VARCHAR(255) -- 指定傳回值類型,如果你不確定返迴文本長度,可以使用text
BEGIN
DECLARE str varchar(255) default ‘hello ‘; -- 定義一個變數,可以指定預設值
SET str = concat(str,s); -- 設定改邊變數的值
RETURN str; -- 傳回值
END $$ -- 注意看清楚了,這個end後面有你在前面定義的分割符號
DELIMITER $$ -- 好,這裡結束。
/**
*開啟資料庫自訂函數功能
*/
set global log_bin_trust_function_creators=1;
/*
* 計算poi點距離
*
*/
DELIMITER $$
CREATE DEFINER = CURRENT_USER FUNCTION `getDistance`(`lon1` float,`lat1` float,`lon2` float,`lat2` float)
RETURNS double
begin
declare d double;
declare radius int;
set radius = 6378140; #假設地球為正球形,直徑為6378140米
set d = (2*ATAN2(SQRT(SIN((lat1-lat2)*PI()/180/2)
*SIN((lat1-lat2)*PI()/180/2)+
COS(lat2*PI()/180)*COS(lat1*PI()/180)
*SIN((lon1-lon2)*PI()/180/2)
*SIN((lon1-lon2)*PI()/180/2)),
SQRT(1-SIN((lat1-lat2)*PI()/180/2)
*SIN((lat1-lat2)*PI()/180/2)
+COS(lat2*PI()/180)*COS(lat1*PI()/180)
*SIN((lon1-lon2)*PI()/180/2)
*SIN((lon1-lon2)*PI()/180/2))))*radius;
return d;
END $$
DELIMITER $$;
mysql 建立使用者自訂函數