SELECT 中计算中泛型类型 P 的语法错误



我在参数类型为 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 ) ).

最新更新