abap - 从惯用的结构化表格中修改某些 BSEG 字段
问题描述
我正在尝试使用以下内容:
update bseg from zbseg
其中表的长度不同(ZBSEG
是 的缩减版BSEG
)。
整个想法BSEG
只是一个例子,我有一个循环,所有集群表都将被迭代,所以一切都应该是动态的。
集群中的表数据减少到只有几个字段并复制到透明表中(新透明表中的数据字典有主键+集群中只有少数字段),然后将数据库中的数据修改并通过复制回UPDATE
集群。
update bseg from zbseg
此语句更新字段值,ZBSEG
但其余部分不会保留旧值,而是放置初始值。
我什至尝试过:
SELECT *
FROM bseg
INTO TABLE gt_bseg.
SELECT mandt bukrs belnr gjahr buzei buzid augdt
FROM zbseg
INTO CORRESPONDING FIELDS OF TABLE gt_bseg.
但它仍然与 zbseg 中未考虑的那些字段重叠。
任何语句只会更新ZBSEG
从不触及其他字段中提取的特定范围的BSEG
字段?
解决方案
我认为您需要从 zbseg 获取具有限制的记录,因为将存在数百万条记录,然后从 bseg 中一一获取并更新它,然后从 zbseg 中删除或更新它的标志以提高性能。
tables: BSEG, ZBSEG.
data: GT_ZBSEG like ZBSEG occurs 1 with header line,
GS_BSEG type BSEG.
select *
into table GT_ZBSEG up to 1000 rows
from ZBSEG.
check SY-SUBRC is initial.
check SY-DBCNT is not initial.
loop at GT_ZBSEG.
select single * from BSEG into GS_BSEG
where BSEG~MANDT = GT_ZBSEG-MANDT
and BSEG~BUKRS = GT_ZBSEG-BUKRS
and BSEG~BELNR = GT_ZBSEG-BELNR
and BSEG~GJAHR = GT_ZBSEG-GJAHR
and BSEG~BUZEI = GT_ZBSEG-BUZEI.
if SY-SUBRC ne 0.
message E208(00) with 'Record not found!'.
endif.
if GS_BSEG-BUZID ne GT_ZBSEG-BUZID
or GS_BSEG-AUGDT ne GT_ZBSEG-AUGDT.
move-corresponding GT_ZBSEG to GS_BSEG.
update BSEG from GS_BSEG.
endif.
" delete same records and transfered
delete ZBSEG from GT_ZBSEG.
endloop.
推荐阅读
- java - 如何使用 Java 的 Process Builder 在 anaconda 虚拟环境中调用 python 脚本?
- class - TYPO3 - 覆盖 Core\Routing\UrlGenerator
- r - 如何在由一台本地机器作为主机和几台远程 VPS 机器作为工作人员的集群上运行带有 Parallel 包的 R 代码?
- html - 是否可以使用 React 在函数中呈现 HTML?
- java - 表单建模器未在选择中显示枚举值
- sql - 在某些条件和 ROW_NUMBER 函数中使用合并
- javascript - 有没有一种简单的方法可以在 d3.csvParse 遇到空行时停止它?
- python-3.x - 不明白为什么服务器不会响应客户端(即使在打开防火墙后 | Python | 服务器
- sql - 选择行,对于 A 列中的相同值,B 列在所有行中都具有特定值
- c - 为什么在 C 中使用链表前端元素错误获取优先级队列?