缺少第一列的数据



我是ABAP的新手。我正在用opensql尝试这个程序,当我执行这个程序时,第一列的数据总是丢失。我查了一下,语法似乎是正确的。我使用的是kna1表,查询也很简单。如果有人注意到这个问题,请帮帮我。

DATA: WA_TAB_KNA1 TYPE KNA1,
      IT_TAB_KNA1 TYPE TABLE OF KNA1,
      V_KUNNR TYPE KUNNR.
SELECT-OPTIONS: P_KUNNR FOR V_KUNNR.
SELECT name1 kunnr name2
       INTO TABLE IT_TAB_KNA1 FROM KNA1
       WHERE KUNNR IN P_KUNNR.
LOOP AT IT_TAB_KNA1 INTO WA_TAB_KNA1.
  WRITE:/ WA_TAB_KNA1-KUNNR,' ', WA_TAB_KNA1-NAME1.
ENDLOOP.

这是一个经典-我想每个ABAP开发人员都必须至少经历一次。

您使用的是结构为KNA1的内部表,这意味着您的目标变量具有以下结构

 ccckkkkkkkkkklllnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN...

其中ccc是客户端,kkkkkkkkkk是字段KUNNR(10个字符),lll是字段LAND1(3个字符)、然后字段NAME1是35个n秒、字段NAME2是35个N秒,依此类推

SELECT语句中,您告诉系统按顺序检索列NAME1KUNNRNAME2-这将产生一个具有以下结构的结果集,使用上面的命名法:

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkkkkkkkkkkNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

系统将尝试将数据压缩到目标结构中,而不是引发某种类型的错误——主要是由于历史原因。因为第一个字段都是字符字段,所以它会成功。结果:内部表的字段MANDT包含NAME1的前三个字符,字段KUNNR包含源字段NAME1的字符4-13,依此类推

幸运的是,解决方案很简单:使用INTO CORRESPONDING FIELDS OF TABLE而不是INTO TABLE。这将导致系统在填充目标表时使用基于字段名的映射。正如tomdemuyt所提到的,也可以滚动自己的目标结构——对于大型数据集,这是一个非常好的主意,因为否则会浪费大量内存。尽管如此,有时这不是一个选项,所以你真的必须知道这个错误-一看到它就立即识别它,并知道该怎么办。

相关内容

  • 没有找到相关文章

最新更新