Необходимо было разобраться, почему запрос не получает все записи из БД. Сам запрос довольно простой. Казалось бы, ничего не предвещало беды.
Запрос:
1 2 3 4 5 6 7 8 9 10 11 |
SELECT vbelv, posnv, vbtyp_n, rfmng, FROM vbfa INTO CORRESPONDING FIELDS OF TABLE @DATA(lt_vbfa) FOR ALL ENTRIES IN @lt_vbap WHERE vbfa~vbelv = @lt_vbap-vbeln AND vbfa~posnv = @lt_vbap-posnr AND ( vbfa~vbtyp_n = 'R' OR vbfa~vbtyp_n = 'h' ). |
Однако вместо 15-ти записей возвращалось всего 5.
Решение проблемы оказалось в документации. Оказывается FOR ALL ENTRIES IN
работает идентично DISTINCT. Одним словом, выбираются только уникальные записи. Указал все ключевые поля из таблицы и все заработало хорошо:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
SELECT vbelv, posnv, vbtyp_n, rfmng, POSNN, VBELN FROM vbfa INTO CORRESPONDING FIELDS OF TABLE @lt_vbfa FOR ALL ENTRIES IN @lt_vbap WHERE vbfa~vbelv = @lt_vbap-vbeln AND vbfa~posnv = @lt_vbap-posnr AND ( vbfa~vbtyp_n = 'R' OR vbfa~vbtyp_n = 'h' ). |
Раз уж разговор пошел о FOR ALL ENTRIES вот статья по про производительность. Возможно кто-то еще не читал : Учимся правильно использовать FOR ALL ENTRIES IN