Текущее время: Чт, мар 28 2024, 13:50

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: FOR ALL ENTRIES IN подводные камни
СообщениеДобавлено: Пт, июл 19 2019, 14:36 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 08:40
Сообщения: 226
Добрый день!
Читал, что при использовании оператора 'FOR ALL ENTRIES IN'
не выводятся дублирующиеся строки (как будто используется параметр distinct).
На моей свежей системе sap это не воспроизводится, сл-но sap поправил эту особенность?

Code:
DATA: lt_lgort TYPE TABLE OF t001l
      , lt_werks TYPE TABLE OF t001w
      , ls_werks type t001w.
""Заводы
ls_werks-werks = '0001'.
append ls_werks to lt_werks.
""Склады
SELECT * FROM t001l INTO TABLE lt_lgort
  FOR ALL ENTRIES IN lt_werks
  WHERE werks = lt_werks-werks.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES IN подводные камни  Тема решена
СообщениеДобавлено: Пт, июл 19 2019, 14:41 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
skaa написал(а):
Добрый день!
Читал, что при использовании оператора 'FOR ALL ENTRIES IN'
не выводятся дублирующиеся строки (как будто используется параметр distinct).
На моей свежей системе sap это не воспроизводится, сл-но sap поправил эту особенность?

Code:
DATA: lt_lgort TYPE TABLE OF t001l
      , lt_werks TYPE TABLE OF t001w
      , ls_werks type t001w.
""Заводы
ls_werks-werks = '0001'.
append ls_werks to lt_werks.
""Склады
SELECT * FROM t001l INTO TABLE lt_lgort
  FOR ALL ENTRIES IN lt_werks
  WHERE werks = lt_werks-werks.


Как Вы это пытаетесь "воспроизвести" если Вы выбираете ВСЕ поля?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES IN подводные камни
СообщениеДобавлено: Пт, июл 19 2019, 15:00 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 08:40
Сообщения: 226
Besa написал:
skaa написал(а):
Добрый день!
Читал, что при использовании оператора 'FOR ALL ENTRIES IN'
не выводятся дублирующиеся строки (как будто используется параметр distinct).
На моей свежей системе sap это не воспроизводится, сл-но sap поправил эту особенность?

Code:
DATA: lt_lgort TYPE TABLE OF t001l
      , lt_werks TYPE TABLE OF t001w
      , ls_werks type t001w.
""Заводы
ls_werks-werks = '0001'.
append ls_werks to lt_werks.
""Склады
SELECT * FROM t001l INTO TABLE lt_lgort
  FOR ALL ENTRIES IN lt_werks
  WHERE werks = lt_werks-werks.


Как Вы это пытаетесь "воспроизвести" если Вы выбираете ВСЕ поля?

Спасибо! Понял свою ошибку


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES IN подводные камни
СообщениеДобавлено: Пт, июл 19 2019, 15:01 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Что именно читал? Где такое написано?

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES IN подводные камни
СообщениеДобавлено: Пт, июл 19 2019, 16:17 
Специалист
Специалист

Зарегистрирован:
Чт, дек 02 2010, 08:37
Сообщения: 156
https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-US/abenwhere_logexp_itab.htm

Цитата:
Notes
◾The same internal table can be specified after FOR ALL ENTRIES and after INTO. The content of the table is evaluated by FOR ALL ENTRIES and then overwritten by the INTO clause.
◾A comparison with a column of an internal table can also be performed using the WHERE condition of a subquery for the same data source.
With respect to rows occurring more than once in the results set, the addition FOR ALL ENTRIES has the same effect as when the addition DISTINCT is specified in the definition of the selection set. Unlike DISTINCT, the rows are not always deleted from the database system but instead are sometimes first deleted from the results set on the application server. The duplicate rows are then removed from the database system if the SELECT statement can be passed to the database system as a single SQL statement. The addition DISTINCT is supported here. If the SELECT statement needs to be distributed to multiple SQL statements before it is passed or if columns of the types STRING and RAWSTRING plus LCHR and LRAW are specified in the SELECT list, the rows are aggregated on the application server.
◾If duplicate rows are first removed from the application server, all rows specified by the WHERE condition (in some cases) are passed to an internal system table and then aggregated. The maximum size of this system table is restricted to that of normal internal tables. More specifically, the system table is always required if one of the additions PACKAGE SIZE or UP TO, OFFSET is used simultaneously. These then have no effect on the number of rows passed from the database server to the application server, but are only used when the rows are passed from the system table to the actual target area. If the maximum size of the internal system table is exceeded, a runtime error occurs.
◾The addition FOR ALL ENTRIES bypasses table buffering for tables with generic buffering if the condition after FOR ALL ENTRIES prevents a single generic area from being specified exactly.
In all other cases, table buffering is used and the addition FOR ALL ENTRIES can be a more efficient alternative to join expressions. ◾Before using an internal table itab after FOR ALL ENTRIES, always check that the internal table is not initial. In an initial internal tables, all rows are read from the database regardless of any further conditions specified after WHERE. This is not usually the required behavior.
◾If the full WHERE condition is ignored because the internal table itab is empty, the implicit WHERE condition for the current client or the client specified using USING CLIENT is not affected (if automatic client handling is switched on). This means that all data is only read from the current client. If automatic client handling is switched off using CLIENT SPECIFIED, no implicit WHERE condition exists for the client. Any WHERE condition specified explicitly for the client column is ignored with the full condition if the internal table itab is empty and the data from all clients is read.
◾If, in a strict mode of the syntax check, FOR ALL ENTRIES is specified together with columns of the types STRING and RAWSTRING plus LCHR and LRAW in the SELECT list, the syntax check is executed in strict mode from Release 7.52.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES IN подводные камни
СообщениеДобавлено: Пт, июл 19 2019, 16:40 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Я бы сказал неочевидно почему так сделано :shock:

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FOR ALL ENTRIES IN подводные камни
СообщениеДобавлено: Пт, июл 19 2019, 16:46 
Специалист
Специалист

Зарегистрирован:
Чт, дек 02 2010, 08:37
Сообщения: 156
Возможно бороли производительность.
Слышал, что есть настройки, регулирующие поведение.
Есть древняя ссылка https://answers.sap.com/questions/3882123/about-rsdbpreferjoin-and-rsdbpreferunionall.html


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB