Table 总计到 HANA 中的标量变量
Table totals to scalar variable in HANA
我目前正在通过 ABAP 对象为 HANA 编写数据库过程。我想要 return 一个根据选择计算的标量值,而不是另一个开发人员必须从 table 中读取的 table。我宁愿不通过 importing/exporting 参数声明要在存储过程中使用的变量。
methods: _amdp_previous_years
importing value(mandt) type mandt
value(in_object) type j_objnr
value(in_year) type gjahr
exporting value(out_results) type total_table
value(out_total) type f.
method _amdp_previous_years by database procedure for hdb
language sqlscript options read-only
using rpsco.
declare totals double array;
declare out_array double array;
-- begin of totals,
-- total type float,
-- end of totals,
-- out_results = type table of totals
out_results = select sum( wlp01 ) + sum( wlp02 ) + sum( wlp03 ) + sum( wlp04 ) + sum( wlp05 ) +
sum( wlp06 ) + sum( wlp07 ) + sum( wlp08 ) + sum( wlp09 ) + sum( wlp10 ) +
sum( wlp11 ) + sum( wlp12 ) + sum( wlp13 ) + sum( wlp14 ) + sum( wlp15 ) +
sum( wlp16 ) as total from rpsco
where objnr = :in_object
and gjahr = :in_year;
totals := array_agg( :out_results.total );
out_total := :totals[1];
-- Type not declared
-- in sap = wlp01 = curr(15,2)
-- total is not a decimal
-- total is not a double
-- total is not a float
-- total is not a int
-- total is not a real
-- what is total supposed to be then?
results = select sum( wlp01 ) + sum( wlp02 ) + sum( wlp03 ) + sum( wlp04 ) + sum( wlp05 ) +
sum( wlp06 ) + sum( wlp07 ) + sum( wlp08 ) + sum( wlp09 ) + sum( wlp10 ) +
sum( wlp11 ) + sum( wlp12 ) + sum( wlp13 ) + sum( wlp14 ) + sum( wlp15 ) +
sum( wlp16 ) as total from rpsco
where objnr = :in_object
and gjahr = :in_year;
out_array := array_agg( :results.total );
endmethod.
第一个语句工作正常,我猜是因为选择的结果被放入声明为 ABAP 浮点数的字段中。
第二个选择有效并且结果已填充,但我不确定如何访问这些列。 SAP 数据元素是 CURRENCY 字段 (15,2)。我已经尝试了文档中的所有标量类型。我收到了同样的错误,它不是正确的类型。
这是不可能的,因为事先没有明确定义类型吗?在网上浏览教程时,人们建议使用 CREATE TYPE 或 CREATE TABLE,但我在尝试使用这些语句时收到语法错误。
我可以自己回答这个问题,以防其他人偶然发现这个问题。您可以通过 to_double( )、to_integer( ) 等各种函数对列进行类型转换。现在选择看起来像:
results = select to_double( sum( wlp01 ) + sum( wlp02 ) + sum( wlp03 ) + sum( wlp04 ) + sum( wlp05 ) +
sum( wlp06 ) + sum( wlp07 ) + sum( wlp08 ) + sum( wlp09 ) + sum( wlp10 ) +
sum( wlp11 ) + sum( wlp12 ) + sum( wlp13 ) + sum( wlp14 ) + sum( wlp15 ) +
sum( wlp16 ) ) as total from rpsco
where objnr = :in_object
and gjahr < :in_year;
我目前正在通过 ABAP 对象为 HANA 编写数据库过程。我想要 return 一个根据选择计算的标量值,而不是另一个开发人员必须从 table 中读取的 table。我宁愿不通过 importing/exporting 参数声明要在存储过程中使用的变量。
methods: _amdp_previous_years
importing value(mandt) type mandt
value(in_object) type j_objnr
value(in_year) type gjahr
exporting value(out_results) type total_table
value(out_total) type f.
method _amdp_previous_years by database procedure for hdb
language sqlscript options read-only
using rpsco.
declare totals double array;
declare out_array double array;
-- begin of totals,
-- total type float,
-- end of totals,
-- out_results = type table of totals
out_results = select sum( wlp01 ) + sum( wlp02 ) + sum( wlp03 ) + sum( wlp04 ) + sum( wlp05 ) +
sum( wlp06 ) + sum( wlp07 ) + sum( wlp08 ) + sum( wlp09 ) + sum( wlp10 ) +
sum( wlp11 ) + sum( wlp12 ) + sum( wlp13 ) + sum( wlp14 ) + sum( wlp15 ) +
sum( wlp16 ) as total from rpsco
where objnr = :in_object
and gjahr = :in_year;
totals := array_agg( :out_results.total );
out_total := :totals[1];
-- Type not declared
-- in sap = wlp01 = curr(15,2)
-- total is not a decimal
-- total is not a double
-- total is not a float
-- total is not a int
-- total is not a real
-- what is total supposed to be then?
results = select sum( wlp01 ) + sum( wlp02 ) + sum( wlp03 ) + sum( wlp04 ) + sum( wlp05 ) +
sum( wlp06 ) + sum( wlp07 ) + sum( wlp08 ) + sum( wlp09 ) + sum( wlp10 ) +
sum( wlp11 ) + sum( wlp12 ) + sum( wlp13 ) + sum( wlp14 ) + sum( wlp15 ) +
sum( wlp16 ) as total from rpsco
where objnr = :in_object
and gjahr = :in_year;
out_array := array_agg( :results.total );
endmethod.
第一个语句工作正常,我猜是因为选择的结果被放入声明为 ABAP 浮点数的字段中。
第二个选择有效并且结果已填充,但我不确定如何访问这些列。 SAP 数据元素是 CURRENCY 字段 (15,2)。我已经尝试了文档中的所有标量类型。我收到了同样的错误,它不是正确的类型。
这是不可能的,因为事先没有明确定义类型吗?在网上浏览教程时,人们建议使用 CREATE TYPE 或 CREATE TABLE,但我在尝试使用这些语句时收到语法错误。
我可以自己回答这个问题,以防其他人偶然发现这个问题。您可以通过 to_double( )、to_integer( ) 等各种函数对列进行类型转换。现在选择看起来像:
results = select to_double( sum( wlp01 ) + sum( wlp02 ) + sum( wlp03 ) + sum( wlp04 ) + sum( wlp05 ) +
sum( wlp06 ) + sum( wlp07 ) + sum( wlp08 ) + sum( wlp09 ) + sum( wlp10 ) +
sum( wlp11 ) + sum( wlp12 ) + sum( wlp13 ) + sum( wlp14 ) + sum( wlp15 ) +
sum( wlp16 ) ) as total from rpsco
where objnr = :in_object
and gjahr < :in_year;