相信大家一定用过这样的语法:
DELETE TABLE itab(某内表) FROM wa(某工作区)
语法很简单,就是以工作区的内容,去删掉该内表中的这一行,但是这句代码又很不简单。
测试提交了一个BUG,大概问题是:有两条记录,需要根据条件删掉其中的一条,但是最终程序还是用了本该删掉的这一条数据去做后续处理。
由于不能重现问题,只能硬看代码,可是代码就那么几行,于是看了一会,通过语法检查的警告消息,我把bug定位到了这句代码上,并进行了一系列测试,最终发现了问题所在。
DELETE TABLE lt_data FROM <ls_data>.
<ls_data> 即是要删掉的数据,该数据在lt_data中是存在的,<ls_data>本就是lt_data表loop出来的,不会存在数据不对应的问题。
首先解析该语法,通过F1 DOCU可以查到如下语句:
If the USING KEY addition is not specified, the primary table key is used. If the USING KEY addition is specified, the table key specified in keyname is used.
翻译一下就是,如果后面没有指定using key,那么primary table key会被使用,如果指定了,则使用特定的key字段。
看起来也没什么问题,接着又有这么一句话:
If the primary table key is used to access a standard table and the key is empty, the first line of the internal table is deleted. If this is known statically, the syntax check produces a warning.&n

文章讨论了在ABAP编程中,使用DELETETABLEFROM...语句时,如果内表没有明确定义主键且使用内嵌声明创建,可能导致错误的删除行为。由于内嵌声明可能产生空主键,这在某些情况下会导致第一条记录被删除,而非预期的记录。作者强调了理解警告信息的重要性,并提出了解决方案,包括使用更精确的删除方法和重视编译器警告。
最低0.47元/天 解锁文章
1842

被折叠的 条评论
为什么被折叠?



