Комментарии 10
Не лучший пример использования FOR ALL ENTRIES IN в статье, лучше RANGE. Лично я им вообще не пользуюсь. Кстати вы пробовали: что произойдет, если локальная таблица будет пустой?
0
Извиняюсь, увидел в выводах про пустую таблицу. И на мой взгляд намного лучше удалить дубли заранее чем мучить БД.
0
1. Дубли, конечно, нужно удалять заранее. Но в данном примере дублей во внутренней таблице LT_BKPF не будет, т.к. выбираются ключевые поля. Будут отдельные колонки с неуникальными значениями.
2. Касаемо RANGE. У конструкции вида «SELECT… FROM… WHERE field IN RANGE» есть существенный недостаток, с которым вы, похоже, еще не столкнулись: если в RANGE будет большое число строк (2000+), то получите dump с ошибкой DBIF_RSQL_INVALID_RSQL из-за того, что размер SQL-запроса в килобайтах превысит некоторую границу. Вот в таких случаях и спасает FOR ALL ENTRIES IN.
2. Касаемо RANGE. У конструкции вида «SELECT… FROM… WHERE field IN RANGE» есть существенный недостаток, с которым вы, похоже, еще не столкнулись: если в RANGE будет большое число строк (2000+), то получите dump с ошибкой DBIF_RSQL_INVALID_RSQL из-за того, что размер SQL-запроса в килобайтах превысит некоторую границу. Вот в таких случаях и спасает FOR ALL ENTRIES IN.
0
Спасибо, опция max_in_blocking_factor помогла значительно сократить время выборки.
Подскажите, пожалуйста, как можно оценить потребление памяти при выполнении запроса?
Подскажите, пожалуйста, как можно оценить потребление памяти при выполнении запроса?
0
Кажется, средствами SAP нельзя узнать объем памяти, который потребовался для отдельного запроса. Но точно можно узнать эту информацию с помощью инструментов СУБД. Попробуйте обратиться к администратору БД.
0
Кажется, средствами SAP нельзя узнать объем памяти, который потребовался для отдельного запроса.
А мне кажется, что не стоит писать всякую ерунду про систему, у которой sql запрос это самая частоиспользуемая инструкция в коде.
ST05 должны знать даже младшие консультанты. А люди, которые пользуются гуглом еще и DB02.
0
Сказали «А», говорите и «Б». Где именно в этих транзакциях посмотреть объем оперативной памяти, который потребовался для выполнения одного конкретного запроса?
В ST05 отражается время выполнения запроса. В DB02 отражается общая информация по БД (индексы, размеры таблиц и т.д.).
В ST05 отражается время выполнения запроса. В DB02 отражается общая информация по БД (индексы, размеры таблиц и т.д.).
+1
В ST05 отражается время выполнения запроса. В DB02 отражается общая информация по БД (индексы, размеры таблиц и т.д.).
Промахнулся.
0
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.
[ABAP] Учимся правильно использовать FOR ALL ENTRIES IN