最近我遇到了一个 Read 语句,它给出了Sy-subrceq 8。 发生这种情况是因为内部表没有记录,同时WHERE子句中的变量也是空的。我一直想知道的是,为什么我们不在 read 语句之前检查表是否不是初始的?
请让我知道我们是否可以在读取语句之前检查 itab 不是初始的。
谢谢!
是的,您可以在阅读语句之前检查itab
is not initial
。 什么困扰着你? 这不是问题。并且与键或与表键一起使用的子句与读语句不在哪里一起使用。
如果给定键值的内部表中不存在值,则SY-SUBRC
将为4
在空表上的READ TABLE
和SY-SUBRC = 8
之间建立直接链接是一个错误的假设。如果您阅读官方 ABAP 文档,您将看到SY-SUBRC = 8
与变体READ TABLE ... BINARY SEARCH
.
因此,对于READ TABLE ... BINARY SEARCH
,如果搜索的行不存在,则SY-SUBRC
将为 8,但如果插入了它,它将放在表的最后一行之后。当然,当内部表为空时,总是如此。
附录 5 月 10 日:SY-SUBRC = 8 也可能与 READ TABLE 一起出现在 SORT 类型的内部表上(因为它隐式使用二叉搜索)。