最近我遇到了一个Read语句,它给出了 Sy-subrc eq 8.这是因为内部表没有记录,同时 WHERE中的变量子句也是空的。我一直在想的是为什么我们不会在读取语句之前检查表是否不是初始?
如果我们可以在读取声明之前检查itab是否为初始值,请告诉我。
谢谢!
答案 0 :(得分:1)
是的,您可以在阅读声明之前检查itab
is not initial
。什么困扰你?这不是问题。并且 WITH KEY 或 WITH TABLE KEY 子句与read语句一起使用而不是 WHERE 。
如果内部表中没有给定键值的值,那么 SY-SUBRC
将 4
答案 1 :(得分:1)
在空表READ TABLE
与SY-SUBRC = 8
之间建立直接链接是错误的假设。如果您阅读官方ABAP documentation,则会看到SY-SUBRC = 8
与变体READ TABLE ... BINARY SEARCH
相关。
因此,对于READ TABLE ... BINARY SEARCH
,如果搜索到的行不存在,则SY-SUBRC
将为8,但如果已插入,则将其放置在表的最后一行之后。当然,当内部表为空时,情况总是如此。
附录5月10日:对于SORTED类型的内部表,READ TABLE也可能出现SY-SUBRC = 8(因为它隐式使用二进制搜索)。