ABAP数据库操作04

您所在的位置:网站首页 如何修改数据库表的数据类型 ABAP数据库操作04

ABAP数据库操作04

2023-07-23 00:02| 来源: 网络整理| 查看: 265

ABAP数据库操作04-数据更改

ABAP数据表更改的关键字:update 或 modify

说明:

1、update/modify都可以更新单行、多行记录

2、update/modify区别,update:只能更新已存在的数据,modify:有已存在数据则更新,不存在则插入

3、使用工作区更新数据时,一般都是先查询数据到该工作区中,然后更改工作区字段value,最后把工作区会写到数据表中

4、更改成功时,sy-subrc=0

5、使用工作区更新时,定义table时请注意是否使用WITH HEADER LINE,详情请查阅下面的:6、工作区更新误区

在SE11创建一个表zlion_test,字段:学号、姓名、性别、年龄,并在SE16N中添加4条记录

在这里插入图片描述

1、单行update REPORT zcsdn_lion_db03. UPDATE zlion_test SET name = 'lion' age = 150 WHERE xh = 1.

在这里插入图片描述

2、多行update REPORT zcsdn_lion_db03. UPDATE zlion_test SET age = 55 WHERE sex = '男'.

在这里插入图片描述

3、用工作区update REPORT zcsdn_lion_db03. DATA i_wa type zlion_test. i_wa-xh = 1. UPDATE zlion_test FROM i_wa.

在这里插入图片描述

工作区字段不赋值则都更新该字段类型的默认value,一般的做法是先从数据表查询到工作区中,工作区更新后再回写到数据表

4、modify单行 REPORT zcsdn_lion_db03. DATA i_wa TYPE zlion_test. i_wa-xh = 1. i_wa-name = '张三'. i_wa-sex = '男'. i_wa-age = 44. MODIFY zlion_test FROM i_wa.

在这里插入图片描述

5、modify多行 REPORT zcsdn_lion_db03. DATA i_wa TYPE zlion_test. DATA i_tab TYPE STANDARD TABLE OF zlion_test WITH HEADER LINE. i_wa-xh = 1. i_wa-name = 'TT'. i_wa-sex = '男'. i_wa-age = 55. APPEND i_wa TO i_tab. CLEAR i_wa. i_wa-xh = 2. *i_wa-name = 'YY'. i_wa-sex = '女'. i_wa-age = 66. APPEND i_wa TO i_tab. *CLEAR i_wa. i_wa-xh = 5. i_wa-name = 'ZZ'. *i_wa-sex = '女'."上面的i_wa没有clear,此处不赋值时value=上面的:i_wa-sex = '女'. *i_wa-age = 66.上面的i_wa没有clear,此处不赋值时value=上面的:i_wa-age = 66. APPEND i_wa TO i_tab. CLEAR i_wa. MODIFY zlion_test FROM TABLE i_tab.

在这里插入图片描述

6、工作区误区

案例

REPORT zcsdn_lion_db03. DATA i_wa TYPE zlion_test. DATA i_tab TYPE STANDARD TABLE OF zlion_test WITH HEADER LINE. i_wa-xh = 1. i_wa-name = 'TT'. i_wa-sex = '男'. i_wa-age = 55. APPEND i_wa TO i_tab. *CLEAR i_wa. i_wa-xh = 2. *i_wa-name = 'YY'. i_wa-sex = '女'. i_wa-age = 66. APPEND i_wa TO i_tab. *CLEAR i_wa. i_wa-xh = 5. i_wa-name = 'ZZ'. *i_wa-sex = '女'."上面的i_wa没有clear,此处不赋值时value=上面的:i_wa-sex = '女'. *i_wa-age = 66.上面的i_wa没有clear,此处不赋值时value=上面的:i_wa-age = 66. APPEND i_wa TO i_tab. *CLEAR i_wa. MODIFY zlion_test FROM i_tab.

以上程序,检查代码无错误,但数据始终无法更新到位

执行前的的数据是

序号姓名性别年龄3方三花女184王四狗男55

执行后数据

序号姓名性别年龄003方三花女184王四狗男55

原因如下:

当定义内表=带表头行的内表时(即有WITH HEADER LINE),则最后一行:MODIFY zlion_test FROM i_tab. 的i_tab指的是工作区i_tab而不是内表i_tab

而APPEND i_wa TO i_tab. 是指把工作区i_wa的数据放到内表i_tab中,所以此时i_tab工作区是空的

解决方案有:

在这里插入图片描述

第一种:

前面都不变,最后面一句:MODIFY zlion_test FROM i_tab.改为(加TABLE) MODIFY zlion_test FROM TABLE i_tab.

————modify指明更新源是内表i_tab

第二种

1、定义内表i_tab时=不要带表头行的内表(即不要WITH HEADER LINE:定义一个内表 但是没有同名的工作区)

2、此时这一行代码会报错:MODIFY zlion_test FROM i_tab.改为(加TABLE) MODIFY zlion_test FROM TABLE i_tab.即可

———— 这样APPEND i_wa TO i_tab.只能是工作区i_wa的数据放到工作区i_tab中,后面的modify工作区就有同步数据了

针对上面的问题,有部分公司强制要求定义内表都不要带表投行(即不要WITH HEADER LINE)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3