2013-10-09 7 views
0

Я пытаюсь выполнить сплетение по размеру на аналитическом представлении в хранимой процедуре, и я хочу передать меру, на которой я буду применять функцию агрегации динамически. Так что я сделал следующее:Как применить функцию агрегации по мере, динамически переданной в хранимую процедуру?

create procedure procHO (in currentMeasure varchar(60)) 
language sqlscript as 
begin 
data_tab = select MONTH_NAME as ID, sum(:currentMeasure) from 
_SYS_BIC."schema/analyticView" GROUP BY MONTH_NAME; 
end; 

я вызвать процедуру таким образом:

call procHO("MARGIN"); 

, но я получаю сообщение об ошибке сказав:

inconsistent datatype: only numeric type is available for aggregation function: line 5 col 38 (at pos 124) Could not execute 'call procHO("MARGIN")' 

Я также попытался это сделать с помощью CE_, вот что я сделал:

create procedure procHO1(in currentMeasure varchar(60)) 
language sqlscript as 
begin 
out1 = CE_OLAP_VIEW("schema/analyticView", ["MONTH_NAME", 
SUM(:currentMeasure)]); 
end; 

, и я вызвать процедуру таким образом:

call procHO1("MARGIN"); 

, но до сих пор, я получаю сообщение об ошибке сказав:

feature not supported: line 5 col 70 (at pos 157) 
Could not execute 'call procHO1("MARGIN")' 

, кстати, в качестве временного решения, можно создать динамический запрос SQL что бы решить эту проблему, вот пример: создать процедуру procHO2 (в currentMeasure VARCHAR (60)) язык sqlscript, как начинают

exec 'select MONTH_NAME AS ID, sum('||:currentMeasure||') as SUM_MEASURE from 
_SYS_BIC."schema/analyticView" GROUP BY MONTH_NAME'; 
end; 

Я называю это так

call procHO2('MARGIN'); 

, но я не хочу, чтобы создать запрос SQL динамически, так как его не рекомендуется по SAP.

Итак, что делать, чтобы динамически преобразовывать агрегированную меру?

ответ

1

это то, что пример кода из документации:

CREATE PROCEDURE my_proc_caller (IN in_client INT, IN in_currency INT, OUT outtab mytab_t) LANGUAGE SQLSCRIPT 
BEGIN 
outtab = SELECT * FROM CALC_VIEW (PLACEHOLDER."$$client$$" => :in_client , PLACEHOLDER."$$currency$$" => :in_currency); 
END; 

, конечно, это работает только на последней версии. В какой ревизии вы работаете?

+0

спасибо, я проверю это, когда у вас есть доступ к экземпляру SAP HANA. Я использую ревизию 67 – MedAli

+0

. Пример, который вы приводите выше, предназначен для вычисления, а не аналитического. В случае аналитического представления передача меры в качестве параметра, похоже, не работает. Не могли бы вы попробовать его с рекомендациями и сказать мне, если он работает, я не буду иметь доступ к хане в течение нескольких дней. благодаря – MedAli