2013-10-22 66 views
0

我創建可以探索給定的一個維度中的分析視圖,一個度量和濾波器(where子句)程序探索SAP HANA的分析視圖

drop procedure dynamicExploration; 

create procedure dynamicExploration(in currentMeasure double, in filter_string 
varchar(100), out dataSubset dataExplorationOutputType) 
language sqlscript as 

begin 
     dataSplitby = select CITY as ID, SUM(:currentMeasure) as SUM_MEASURE from 
    _SYS_BIC."package/analyticView" Group by CITY; 

    --dataSubset = APPLY_FILTER(:dataSplitby, :filter_string); 
    dataSubset = select * from :dataSplitBy; 
end; 

其中dataSubset是一種數據類型中定義的過程如下:

drop type dataExplorationOutputType; 
create type dataExplorationOutputType as table("ID" varchar(100), "SUM_MEASURE" double); 

但我得到這個錯誤,請你檢查有什麼問題;

Could not execute 'create procedure dynamicExploration(in currentMeasure double, in  
filter_string varchar(100), out ...' in 166 ms 8 µs . 
SAP DBTech JDBC: [266] (at 200): inconsistent datatype: only numeric type is available  
for aggregation function: line 4 col 36 (at pos 200) 

我也嘗試將currentMeasure定義爲varchar,但仍然得到相同的錯誤。

我所試圖實現最終是要創建一個存儲過程,可以幫助其他的程序來選擇基於一組由用戶定義給定參數的的數據子集:維,度量和過濾器。

下降過程dynamicExploration;

create procedure dynamicExploration(in currentDimension varchar(100), in currentMeasure double, in filter_string 
varchar(100), out dataSubset dataExplorationOutputType) 
language sqlscript as 

begin 
    dataSplitby = select :currentDimension as ID, SUM(:currentMeasure) as SUM_MEASURE from 
    _SYS_BIC."package/analyticView" Group by :currentDimension; 

    dataSubset = APPLY_FILTER(:dataSplitby, :filter_string); 
--dataSubset = select * from :dataSplitBy; 
end; 

我已經創建了一個過程來完成這種動態的探索基於動態SQL,這是不推薦的特性。我所尋找的是一個更好的解決方案/主意,做這樣的分析視圖(數據立方體)的動態探索。

感謝

回答

2

你必須建立一個動態的SQL,並與EXECUTE IMMEDIATE命令執行它。我知道這不是建議的,但你的用例需要它。確保自己免受SQL注入,例如通過檢查被傳遞到反對的列表中選擇包裝過程維度的名稱爲「允許」尺寸

+0

嗨,我更新了我的職位提出什麼,我想要的目的。謝謝! – MedAli

+0

好吧,我想我得到了它。動態SQL是實現此目的的唯一方法。 「不建議」並不意味着「永遠做」(爲什麼SAP時,必須從來沒有使用它的動態SQL HANA支持執行),它的意思是「明智地使用,只有當真正需要的」)... –