jpa使用@Query调用自定义sql函数

1 自定义sql函数

还是一定一定要注意,oracle大小写问题,不加双引号代表不区分大小写,加了双引号代表区分大小写,写sql语句的时候就很可能会出现诸如标识符无效或者调用函数失败等问题

CREATE OR REPLACE FUNCTION distance(Lung1 IN NUMBER , Lat1 IN NUMBER, Lung2 IN NUMBER, Lat2 IN  NUMBER )
RETURN NUMBER
AS
earth_padius NUMBER := 6378.137;
radLat1      NUMBER := Lat1 * 3.141592625 / 180;
radLat2      NUMBER := Lat2 * 3.141592625 / 180;
a            NUMBER := radLat1 - radLat2;
b            NUMBER := Lung1 * 3.141592625 / 180 - Lung2 * 3.141592625 / 180;
dis            NUMBER := 0;
BEGIN
	-- routine body goes here, e.g.
	-- DBMS_OUTPUT.PUT_LINE('Navicat for Oracle');
	dis := 2 *
       Asin(Sqrt(power(sin(a / 2), 2) +cos(radLat1) * cos(radLat2) * power(sin(b / 2), 2)));
  dis := dis * earth_padius;
  dis := Round(dis * 10000) / 10000;
		
	RETURN dis;
END;

2 测试自定义sql函数

jpa使用@Query调用自定义sql函数_第1张图片

3 修改后台数据访问层

使用function(‘函数名’,para1.para2,…)在Query中调用sql函数。

//调用数据库自定义函数
    @Query(value="SELECT a FROM Client a WHERE function('DISTANCE',?1,?2,a.LONGITUDE,a.LATITUDE)<=2")
    public List findNearClient(Float LONGITUDE,Float LATITUDE);

参考资料

1、How to call custom database functions with JPA and Hibernate
2、在 Oracle 中根据经纬度计算两地之间的距离
3、mysql,php和js根据经纬度计算距离

你可能感兴趣的:(SpringBoot)