通过SELECT语句用附加数据填充内部表的附加列?这能做到吗?
此时,我在itab通过SELECT语句用附加数据填充内部表的附加列?这能做到吗?,select,abap,Select,Abap,此时,我在itabgt_mara中有100个条目 SELECT matnr ersda ernam laeda FROM mara INTO CORRESPONDING FIELDS OF TABLE gt_mara UP TO 100 ROWS. 在这一点上,我有59个条目。这是有道理的。这段代码有缺陷,因为它可能在运行时修改了选择条件 无论如何,我的意图是:在一个点上选择表的前4个字段,然后在另一个点上选择其他5个字段 当然,这只是一个例子。也许第二次选择将在具有相同键或不同字段数的
gt_mara
中有100个条目
SELECT matnr ersda ernam laeda
FROM mara
INTO CORRESPONDING FIELDS OF TABLE gt_mara
UP TO 100 ROWS.
在这一点上,我有59个条目。这是有道理的。这段代码有缺陷,因为它可能在运行时修改了选择条件
无论如何,我的意图是:在一个点上选择表的前4个字段,然后在另一个点上选择其他5个字段
当然,这只是一个例子。也许第二次选择将在具有相同键或不同字段数的不同表上进行
那么这能做到吗?
是否有比默认情况下(重做完整选择)更有效的方法来实现这一点?要么立即选择所需的所有内容(如果数据来自同一个表,这是首选解决方案),要么稍后选择附加内容(如果材料来自不同的表,而不是用于第一次选择,这是一个好主意)。为了组装结果集,数据库通常需要访问整个数据集,因此选择一些额外的字段并不会造成真正的伤害-这与使用大量的
select
语句再次访问数据库不同(如果所有条目的表变大)。还请记住,根据您正在执行的处理类型,表的内容在此期间可能已更改。如果数据库事务(LUW)结束(对话框步骤之间总是如此),您就失去了数据库级事务隔离。好的,我认为您的问题的实质是,您是否可以通过第二条select语句直接更新内部表中某些未填充的字段
答案是否定的。您的第二个select语句将替换表gt_mara
中的内容,因此您将得到一个内部表,其中前4个字段为空,后5个字段为空
您所能做的最好的事情如下:
SELECT aenam vpsta pstat lvorm mtart
FROM mara
INTO CORRESPONDING FIELDS OF TABLE gt_mara
FOR ALL ENTRIES IN gt_mara
WHERE matnr = gt_mara-matnr AND
ersda = gt_mara-ersda AND
ernam = gt_mara-ernam AND
laeda = gt_mara-laeda.
这显然是非常低效的,这就是为什么在将数据返回到应用程序服务器之前,您总是试图让数据库为您做同样多的工作。显然,如果数据来自同一个表,则一次选择所有数据将是您的最佳选择。在大多数情况下,即使数据位于不同的表中因此,最好创建视图或使用联接
在极少数情况下,有必要在内部表中循环,以填充在执行原始选择时不可用的某些字段
SELECT matnr ersda ernam laeda
FROM mara
INTO CORRESPONDING FIELDS OF TABLE gt_mara
UP TO 100 ROWS.
SELECT matnr aenam vpsta pstat lvorm mtart
FROM mara
INTO CORRESPONDING FIELDS OF TABLE gt_mara2
FOR ALL ENTRIES IN gt_mara
WHERE matnr = gt_mara-matnr AND
ersda = gt_mara-ersda AND
ernam = gt_mara-ernam AND
laeda = gt_mara-laeda.
loop at gt_mara2 into ls_mara.
modify gt_mara from ls_mara transporting aenam vpsta pstat lvorm mtart
where matnr = ls_mara-matnr.
endloop.