Ошибка чтения инструкции, поскольку внутренняя таблица пуста - PullRequest
0 голосов
/ 24 апреля 2018

Недавно я наткнулся на оператор Read, который дает Sy-subrc eq 8. Это происходит потому, что во внутренней таблице нет записей и в то же время переменных в WHERE пункты тоже пустые.Мне было интересно, почему бы нам не проверить, не является ли таблица исходной перед оператором чтения?

пожалуйста, дайте мне знать, если мы сможем проверить, что itab не является начальным, прежде чем читать заявление.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Неправильно делать прямую ссылку между READ TABLE в пустой таблице и SY-SUBRC = 8.Если вы прочитаете официальную документацию ABAP , вы увидите, что SY-SUBRC = 8 относится к варианту READ TABLE ... BINARY SEARCH.

Таким образом, с READ TABLE ... BINARY SEARCH, SY-SUBRC будет 8, еслиискомая строка не существует, но если она была вставлена, она будет помещена после последней строки таблицы.Конечно, это всегда имеет место, когда внутренняя таблица пуста.

Добавление 10 мая: SY-SUBRC = 8 может также произойти с READ TABLE во внутренних таблицах типа SORTED (потому что он неявно использует двоичный поиск).

0 голосов
/ 24 апреля 2018

Да, вы можете проверить itab is not initial перед прочтением заявления. что тебя беспокоит? это не проблема. И предложение WITH KEY или WITH TABLE KEY , используемое с оператором чтения, а не WHERE .
И если во внутренней таблице нет значения для данного значения ключа, то SY-SUBRC будет 4

...