ABAP数据库操作04-数据更改
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 | 方三花 | 女 | 18 |
4 | 王四狗 | 男 | 55 |
执行后数据
序号 | 姓名 | 性别 | 年龄 |
---|---|---|---|
0 | 0 | ||
3 | 方三花 | 女 | 18 |
4 | 王四狗 | 男 | 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)
文章来自于网络,如果侵犯了您的权益,请联系站长删除!