簡體   English   中英

SAP HANA 過程動態 SQL 選擇到變量:不工作

[英]SAP HANA Procedure Dynamic SQL Select Into Variable: Not Working

關於如何在過程或計算視圖中使用空間函數的任何想法? 我不能使用表函數,因為我需要一個游標。 請參閱以下問題:

我在存儲過程中嘗試使用 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 -模型/

但是,不允許在以太列引擎或 SQL 引擎中使用空間函數。

計算列:

STPOINT 計算視圖

我回去嘗試重新激活包含此代碼的程序,該程序一直在工作,並且仍然有效,但是如果我編輯它並嘗試激活它,則會出現相同的編譯錯誤。 無法選擇到變量中。 所以,自從我第一次創建這個程序以來,事情發生了變化。

哇,我偶然發現了一種語法並不需要使用單引號: 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.92197086).ST_SRID(4326).ST_Distance( NEW ST_Point(-117.0394467, 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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM