Stored procedures 在SAP HANA中探索分析视图的过程

Stored procedures 在SAP HANA中探索分析视图的过程,stored-procedures,sap,dimension,measure,hana,Stored Procedures,Sap,Dimension,Measure,Hana,我正在创建一个过程,该过程可以探索给定一个维度、一个度量值和一个过滤器(where子句)的分析视图 其中,dataSubset是定义如下的数据类型: drop type dataExplorationOutputType; create type dataExplorationOutputType as table("ID" varchar(100), "SUM_MEASURE" double); 但是我得到了这个错误,请你检查一下有什么问题 Could not execute 'create

我正在创建一个过程,该过程可以探索给定一个维度、一个度量值和一个过滤器(where子句)的分析视图

其中,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,但仍然得到相同的错误

我试图最终实现的是创建一个存储过程,它可以帮助另一个过程根据用户定义的一组给定参数选择数据子集:维度、度量和过滤器

跌落过程动态探索

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的动态探索过程,这是一个不推荐的特性。我所寻找的是一个更好的解决方案/想法,用于对分析视图(数据立方体)进行这种动态探索


谢谢

您必须构造一个动态SQL,并使用executeimmediate命令执行它。我知道这不推荐,但您的用例需要它。确保自己不受SQL注入的影响,例如,通过对照“允许”维度列表检查传递到包装程序中的维度名称

hi,我更新了我的帖子,展示了我试图实现的目标。谢谢好的,我想我明白了。动态SQL是实现这一点的唯一方法。“不推荐”并不意味着“永远不要这样做”(为什么SAP HANA在您必须永远不要使用动态SQL的情况下会支持动态SQL的执行),它意味着“明智地使用,并且只有在真正需要时才使用”)。。。
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;