将数据从内部表移动到数据库表取决于内部表的顺序

2020-08-26 04:42发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


亲爱的

我有一个内部表,其中一个字段包含5个值。.
我需要将内部表条目移动到包含5个字段的DB表中。

现在我必须将内部表的第一个值映射到DB表的第一个字段,将内部表的第二个值映射到DB表的第一个字段,依此类推。

必须不使用sy-tabix来实现。
有人可以提出解决方案吗?

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


亲爱的

我有一个内部表,其中一个字段包含5个值。.
我需要将内部表条目移动到包含5个字段的DB表中。

现在我必须将内部表的第一个值映射到DB表的第一个字段,将内部表的第二个值映射到DB表的第一个字段,依此类推。

必须不使用sy-tabix来实现。
有人可以提出解决方案吗?

付费偷看设置
发送
9条回答
梦想连接
1楼-- · 2020-08-26 05:41

嗨,

首先使用5个字段创建数据库的内部表。 然后使用"将内部表的相应字段移动到数据库内部表"。 内部表的字段将分别映射到DB字段。 然后,您可以使用数据库内部表修改数据库。

谢谢

M.Dey

天桥码农
2楼-- · 2020-08-26 05:29

可能想弄清楚它的目的是什么,就像Sandra一样,我不清楚不使用sy-tabix的确切原因是什么。

这似乎是某种学生的课堂作业,我想知道老师是不是完全没有想到这一点,还是您没有向我们提到过更多呢?

"强力"方法看起来像在以下示例之一中发布的示例中。 您可以使用自己的计数器变量来代替sy-tabix。 但是在现实生活中,没有人应该写这样的代码。 除了是业余爱好者之外,它还忽略了字段类型的任何潜在问题。 例如。 如果您有文本值,但DB字段为数字怎么办? 或者今天您有5个字段,但明天有25个字段。老实说,整个前提似乎并不严重。 请说明这是哪里来的。

clasier
3楼-- · 2020-08-26 05:27

好,在这种情况下,具有1个字段的内部表将所有5个值连接在一起。 因此,您可以根据数据类型的长度,相应地按偏移量分割值,然后将其分配给相应的DB内部表字段。 例如 假设您有5个长度为2个字符的字段值,用于对应的DB字段。 因此,

将表lt_itab读入ls_wa索引1。

如果sy-subrc = 0。

ls_dbtable_fieldname1 = ls_wa-table_line + 0(2)。

ls_dbtable_fieldname2 = ls_wa-table_line + 2(2)....依此类推,直到完成5个字段。

endif。

黑丝骑士
4楼-- · 2020-08-26 05:31

数据:

value1类型字符串值空间,

value2类型的字符串值空间,

value3类型的字符串值空间,

value4类型字符串值空间,

value5类型字符串值空间,

ls_field1类型字符串值'1; 2; 3; 4; 5'。 "例如

*

数据开始:ls_dbtable,例如

field1类型的字符串值空间,

field2类型的字符串值空间,

field3类型的字符串值空间,

field4类型的字符串值空间,

field5类型的字符串值空间,

数据结尾。

*

数据开头:lt_dbtable

field1类型的字符串值空间,

field2类型的字符串值空间,

field3类型的字符串值空间,

field4类型的字符串值空间,

field5类型的字符串值空间,

数据结尾。

*

数据:lt_field1类型字符串。

*

* etc。

*做...

*向ls_field1填充5个值,每个值以1个分号隔开,或者根据需要;

将ls_field1附加到lt_field1。

* enddo。

*

在lt_field1处循环。

将lt_field1在空格处拆分为value1 value2 value3 value3 value4 value5。

*将value1,value2,value3,value4,value5移到DB表中

ls_dbtable-field1 = value1。

ls_dbtable-field2 = value2。

ls_dbtable-field3 = value3。

ls_dbtable-field4 = value4。

ls_dbtable-field5 = value5。

将ls_dbtable附加到lt_dbtable。

清除:value1,value2,value3,value4,value5,ls_dbtable。

endloop。

*等

浮生未央
5楼-- · 2020-08-26 05:32

因此,您的内部表包含5行,每行对应一个数据库表中的字段。

我能想到的最简单的方法是 如果您使用的是7.40+,则为:

 table_structure-field1 = table_data [1]。
 table_structure-field2 = table_data [2]。
 ... 

如果不是,或者您希望使用更通用的东西(如果将新字段添加到表中,则不需要修改):

 FIELD-SYMBOLS:<  db_field> TYPE ANY。

 循环AT data_fields INTO data_field。
   将结构table_structure分配给sy-tab到 =数据字段。
 ENDLOOP。
Nan4612
6楼-- · 2020-08-26 05:29

更改自:

将lt_field1在空格处拆分为value1 value2 value3 value3 value4 value5。

收件人:

数据:ld_semicolon char1值';'。

将ld_分号处的lt_field1拆分为value1 value2 value3 value3 value4 value5。

一周热门 更多>