尽量不要使用Select *。
程序的可读性差就不多说了。
在写程序的过程中,我们通常会用到一张表中的很多字段,于是图方便在定义结构体的时候就直接的
DATA: BEGIN OF GT_ITAB OCCURS 0.
INCLUDE ***
***
***
END OF GT_ITAB.
在数据选择的时候就为了方便而是用 SELECT * INTO CORRESPONDING FIELDS OF TABLE ITAB.在代码编写的时候使用这样的方式是一种很不好的习惯,一不小心会产生很难排查的错误。 尤其是在 from 语句中试用的还是 tab_a inner join tab_b inner join tab_c 这样的多个表进行连接的时候。
我们知道 SELECT * INTO CORRESPONDING FIELDS OF TABLE ITAB,他们是根据字段的名进行一一的匹配的,我们也知道在SAP的表里面通常会有很多同名的字段,比如关联字段,保留字段等。在这个时候,内标中的字段会和哪儿源字段进行匹配呢?(关联字段倒还无所谓,因为多列是一样的值)
虽然在后期的应用中,很可能不回用到哪些保留字段。但在我们进行一些表级别的操作的时候,会产生一些困难,比如表的SORT,DELETE ADJACENT DUPLICATES FROM 的时候会对我们的数据处理带来一定的影响。
那么,SELECT * INTO CORRESPONDING FIELDS OF TABLE 的时候,多个重名列的匹配有什么规则的时候,到底怎么匹配的呢? 答案就是,匹配最后一个同名列。
所以,如果你非要使用SELECT * ,那么,请你在表的关联的时候,把目标表放在关联的最后。