matinal:BUG记录: DELETE TABLE (内表) FROM (结构) 出错

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

相信大家一定用过这样的语法:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值