В результате тестирования разработки оказалось, что при выборке из Z* таблицы выбираются не все значения.
В таблице у нас находятся 15 записей. В se11 мы видим, что у пяти записей в поле del_flag = 'X', у десяти del_flag пустой.
Далее выполняем три запроса к таблице:
1 2 3 |
SELECT * FROM z_table INTO TABLE @DATA(lt_table_1). SELECT * FROM z_table INTO TABLE @DATA(lt_table_2) WHERE del_flag = @abap_true. SELECT * FROM z_table INTO TABLE @DATA(lt_table_3) WHERE del_flag @abap_true. |
В результате имеем: все 15 записей в таблице lt_table_1, 5 записей с del_flag = 'X' в таблице lt_table_2 и ТОЛЬКО 5 записей в таблице lt_table_3 с del_flag 'X'. Куда же делись еще 5 записей, которые должны были выбраться в таблицу ls_table_3 ?
Оказалось, что поле del_flag добавили в таблицу z_table, когда эти не выбравшиеся 5 записей уже лежали в таблице, и для поля del_flag этих записей установилось значение NULL . А SELECT в свою очередь, не учитывает поля NULL в условии.
Чтобы подобной ситуации не возникало или для исправления существующих необходимо было добавлять поле del_flag с галкой "Нач. значения". А после адаптировать таблицу в SE14 с сохранением данных. И поле del_flag ( в моем случае ) будет работать корректно, старые записи примут начальное значение вместо NULL.
SELECT отработает верно.