微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SAP HANA过程动态SQL选择入变量:不起作用

如何解决SAP HANA过程动态SQL选择入变量:不起作用

关于如何在过程或计算视图中使用空间函数的任何想法?我不能使用表函数,因为我需要一个游标。请查看以下问题:

我在带有select into(不允许进入)的存储过程中尝试了动态sql: (大约三个月前它确实起作用了,但是现在无法激活?) 这个博客说它应该工作: https://blogs.sap.com/2017/04/18/sap-hana-2.0-sps-01-new-developer-features-database-development/

动态sql

EXECUTE IMMEDIATE 'SELECT NEW ST_Point(' || char(39) || 'POINT(' || decEndPointLong1 || ' ' || decEndPointLat1 || ')' || char(39) || ',4326).ST_distance( NEW ST_Point(' || char(39) || 'POINT(' || CURRLONG || ' ' || CURRLAT || ')' || char(39) || ',4326)) FROM DUMMY' INTO ddistEP1;

然后,我认为我将创建一个计算视图, 这个博客说它应该工作: https://blogs.sap.com/2018/02/23/compute-distance-using-a-calculation-view-xs-advanced-model/

但是,不允许在以太列引擎或sql引擎中使用空间函数

计算列:

STPOINT Calculation View

我回过头来,尝试重新激活包含此代码的过程,该过程一直在工作,并且仍然有效,但是如果我对其进行编辑并尝试将其激活,则存在相同的编译错误。无法选择变量。因此,自从我第一次创建此过程以来,情况已经发生了变化。

解决方法

哇,我偶然发现了不需要单引号的另一种语法: https://blogs.sap.com/2017/02/17/transforming-spatial-data-in-sap-hana/

SELECT NEW ST_Point(-117.0400842,32.92197086).ST_SRID(4326).ST_Distance( NEW ST_Point(-117.0394467,32.92241185).ST_SRID(4326)) FROM DUMMY

现在,我认为我可以消除动态SQL。

看看两种不同的方式:

1) SELECT NEW ST_Point(-117.0400842,32.92241185).ST_SRID(4326)) FROM DUMMY;
2) SELECT NEW ST_Point('POINT(-117.0400842 32.92197086)',4326).ST_Distance( NEW ST_Point('POINT(-117.0394467 32.92241185)',4326)) FROM DUMMY;

它们产生的结果(米)略有不同:

  1. 77.06
  2. 77.12

可能是因为(1)将计算出的点转换为4326,而(2)根据4326计算了点。

因此,此代码:

EXECUTE IMMEDIATE 'SELECT NEW ST_Point(' || char(39) || 'POINT(' || decEndPointLong1 || ' ' || decEndPointLat1 || ')' || char(39) || ',4326).ST_Distance( NEW ST_Point(' || char(39) || 'POINT(' || CURRLONG || ' ' || CURRLAT || ')' || char(39) || ',4326)) FROM DUMMY' INTO dDistEP1;

归结为:

SELECT r1.FROMLAT  INTO decEndPointLat1  FROM DUMMY;
SELECT r1.FROMLONG INTO decEndPointLong1 FROM DUMMY;
SELECT NEW ST_Point(decEndPointLong1,decEndPointLat1).ST_SRID(4326) INTO stEndCoord1 FROM DUMMY;
    
SELECT NEW ST_Point(CURRLONG,CURRLAT).ST_SRID(4326) INTO stCurrCoord FROM DUMMY;
    
SELECT stEndCoord1.ST_Distance(stCurrCoord) INTO dDistEP1 FROM DUMMY;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。