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

Abap SELECT中计算中泛型类型P的语法错误,abap,Abap,我在一个参数类型为p的类中有一个方法,但在尝试激活时出现以下语法错误: 表达式中不能使用I_折扣之类的泛型变量 代码是: 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

我在一个参数类型为p的类中有一个方法,但在尝试激活时出现以下语法错误:

表达式中不能使用I_折扣之类的泛型变量

代码是:

  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.

怎么了?

SQL表达式中不允许使用泛型类型。您需要通过内部表进行操作

定义一个局部中间变量 定义p长度为16位小数2的lv_折扣或您需要的任何内容,用i_折扣的内容填充它,并在选择中使用它:

  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.

试着给它一个特定的大小:数据价格类型p长度16小数2。谢谢,但是在方法定义过程中有什么方法吗?或者如何在方法中传递这样的参数?使用所述类型定义本地lv_折扣,用i_折扣的内容填充它,并在SelectThank Andras中使用它。这种方式也出现在我的脑海中,我解决了这个问题。但由于我不是专家,我想知道是否还有其他方法可以做到这一点。声明类型为P的参数或字段符号被视为泛型类型,因为它可以有任意数量的数字/小数。如果使用类型来声明独立类型,则必须指明使其完整(即非泛型)的位数/小数位数,并且可以使用它来键入参数,以便直接在选择中使用它。但是如果你真的想要一个泛型参数,比如任何数字类型,那么你必须按照安德拉斯的解释去做:可能包含所有数字的类型是decloat34。
  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.