我在参数类型为 P 的类中有一个方法,但在尝试激活时出现以下语法错误:
表达式中不能使用通用类型的变量(如 I_DISCOUNT(。
代码为:
METHODS ceil_floor_abs IMPORTING i_discount TYPE p .
METHOD ceil_floor_abs.
SELECT carrid, connid, paymentsum, paymentsum * @i_discount AS disc_payment,
ceil( paymentsum * @i_discount ) AS ceil_payment,
floor( paymentsum * @i_discount ) AS floor_payment,
abs( paymentsum ) AS abs_payment
INTO TABLE @DATA(it_sflight4) UP TO 10 ROWS
FROM sflight.
ENDMETHOD.
怎么了?
定义局部中间变量
用TYPE p LENGTH 16 DECIMALS 2
(或任何你需要的东西(定义lv_discount
,用i_discount
的内容填充它,并在选择中使用它:
METHODS ceil_floor_abs IMPORTING i_discount TYPE p .
DATA: lv_discount TYPE p LENGTH 16 DECIMALS 2.
lv_discount = i_discount.
METHOD ceil_floor_abs.
SELECT carrid, connid, paymentsum, paymentsum * @lv_discount AS disc_payment,
ceil( paymentsum * @lv_discount ) AS ceil_payment,
floor( paymentsum * @lv_discount ) AS floor_payment,
abs( paymentsum ) AS abs_payment
INTO TABLE @DATA(it_sflight4) UP TO 10 ROWS
FROM sflight.
ENDMETHOD.
SQL 表达式中不允许使用泛型类型。你需要通过Internal Table
来做到这一点。
SELECT carrid, connid, paymentsum, paymentsum AS disc_payment,
paymentsum AS ceil_payment,
paymentsum AS floor_payment,
abs( paymentsum ) AS abs_payment
INTO TABLE @DATA(lt_sflight4) UP TO 10 ROWS
FROM sflight.
DATA:
lt_sflight_ceil_floor_abs LIKE lt_sflight4.
lt_sflight_ceil_floor_abs = VALUE #( FOR sflight IN lt_sflight4 (
carrid = sflight-carrid
connid = sflight-connid
paymentsum = sflight-paymentsum
disc_payment = sflight-paymentsum * i_discount
ceil_payment = ceil( sflight-paymentsum * i_discount )
floor_payment = floor( sflight-paymentsum * i_discount )
abs_payment = sflight-abs_payment ) ).