内联声明变量的类型确定?



声明变量时,通常要指定它的类型。

如果不指定内联声明变量的类型,会发生什么?它是根据它收到的值分配的吗?

例如:

例1这里我们通过传入的值获得字符串类型?

DATA(lv_name) = 'Testing Value'.

例2在这里我们得到lt_mara作为类型表的mara?

SELECT * FROM mara 
INTO TABLE @DATA(lt_mara) UP TO 10 ROWS.

我对这个问题理解正确吗?

是的,类型在激活时根据您分配的类型自动派生。DATA(lv_name) = 'Testing Value'会产生TYPE c LENGTH 13,因为这是你分配的字符的长度。如果您想要TYPE string,请使用字符串模板语法分配它:DATA(lv_name) = |Testing Value|

如果你想强制一个特定的类型,那么你可以将它与CONV操作符结合使用。这对于数字类型非常有用,因为除了TYPE i之外,没有任何数字类型的专用文字。例如:

DATA(lv_num) = CONV decfloat16( '12.5' ).

这将导致TYPE decfloat16变量的值为12.5

TYPE p LENGTH x DECIMALS y类型有一个轻微的特性。例如,这行不通:

DATA(lv_num) = CONV p LENGTH 10 DECIMALS 2( '12.5' ). "<- Syntax error!

但是如果您事先定义了命名类型,则可以将CONV-操作符与TYPE p一起使用:

TYPES type_my_decimal TYPE p LENGTH 10 DECIMALS 2.
DATA(lv_num) = CONV type_my_decimal( '12.5' ). 

(这当然也适用于字典类型)。

当您在SELECT * FROM mara中使用内联声明时,从技术上讲,生成的结构将不是字典类型MARA,而是具有与MARA完全相同列的类型。因此,对于大多数意图和目的来说,它是相同的。当您使用而不是时,SELECT的内联声明最有用。只做一个SELECT *,但当你指定你想要的字段列表。使用内联声明意味着你不需要定义一个自定义的数据结构,当你改变SELECT的列列表时,你需要手动保持同步。

相关内容

  • 没有找到相关文章

最新更新