процедура для изучения аналитического представления в SAP HANA

Я создаю процедуру, которая может исследовать аналитическое представление с учетом одного измерения, одной меры и фильтра (пункт where)

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, функция, которая не рекомендуется. Я ищу лучшее решение / идею для такого рода динамического исследования аналитического представления (куба данных).

Благодарность


person Mohamed Ali JAMAOUI    schedule 22.10.2013    source источник


Ответы (1)


Вам нужно будет создать динамический SQL и выполнить его с помощью команды EXECUTE IMMEDIATE. Я знаю, что это не рекомендуется, но этого требует ваш вариант использования. Обязательно защитите себя от SQL-инъекций, например путем проверки имени измерения, которое передается в процедуру-оболочку, по списку "разрешенных" измерений.

person schmerdy - Sonos    schedule 25.10.2013
comment
привет, я обновил свой пост, чтобы рассказать о том, чего я пытаюсь достичь. Спасибо! - person Mohamed Ali JAMAOUI; 25.10.2013
comment
хорошо, я думаю, что понял. Динамический SQL - единственный способ добиться этого. не рекомендуется не означает никогда этого не делать (почему SAP HANA поддерживает выполнение динамического SQL, если вы никогда не должны его использовать), это означает разумное использование и только тогда, когда это действительно необходимо) ... - person schmerdy - Sonos; 01.11.2013