Текущее время: Ср, май 14 2025, 04:44

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: select * ...where bname in itab
СообщениеДобавлено: Пн, май 23 2005, 15:32 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, авг 31 2004, 14:57
Сообщения: 5258
Откуда: Ростов невеликий
Пол: Мужской
не въеду...- itab только типа ranges?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 23 2005, 15:34 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
Догадался или знал? :wink:
Еще может быть Select-options...
Для выбора по значениям произвольной внутренней таблицы используется FOR ALL ENTRIES.

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


Последний раз редактировалось nicky555 Пн, май 23 2005, 15:34, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: select * ...where bname in itab
СообщениеДобавлено: Пн, май 23 2005, 15:34 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
Skif написал:
не въеду...- itab только типа ranges?

Ну или select-options
селекционная таблица, короче..

А для обычных таблиц FOR ALL ENTRIES


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: select * ...where bname in itab
СообщениеДобавлено: Пн, май 23 2005, 15:39 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, авг 31 2004, 14:57
Сообщения: 5258
Откуда: Ростов невеликий
Пол: Мужской
T написал:
Skif написал:
не въеду...- itab только типа ranges?

Ну или select-options
селекционная таблица, короче..

А для обычных таблиц FOR ALL ENTRIES

блин - точно. 100 раз использовал и забыл...что-то после отпуска никак не работается ))


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: select * ...where bname in itab
СообщениеДобавлено: Пн, май 23 2005, 16:03 
Директор
Директор

Зарегистрирован:
Чт, май 12 2005, 11:10
Сообщения: 1038
Пол: Мужской
Skif написал:
T написал:
Skif написал:
не въеду...- itab только типа ranges?

Ну или select-options
селекционная таблица, короче..

А для обычных таблиц FOR ALL ENTRIES

блин - точно. 100 раз использовал и забыл...что-то после отпуска никак не работается ))


в очень многих случаях FOR ALL ENTRIES значительно медленнее, чем просто SELECT ... APPENDING ... в цикле по intab ...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: select * ...where bname in itab
СообщениеДобавлено: Пн, май 23 2005, 16:16 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
Egal написал:
в очень многих случаях FOR ALL ENTRIES значительно медленнее, чем просто SELECT ... APPENDING ... в цикле по intab ...


:shock: С какой радости-то?
Просто многие забывают, что если передать в FOR ALL ENTRIES пустую таблицу, то считай будет работать как пустой RANGE. То есть будет отбираться всё, что подошло под остальные критерии!

Понятно, что нужно сравнивать в каждом отдельном случае, но если поля будут ключевыми или проиндексированными, то всё будет ОК.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 23 2005, 16:18 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
Согласен с T (в первом абзаце :wink: ): FOR ALL ENTRIES - это UNION - отсюда и все, что с ним связано, в том числе и Full Scan.

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 23 2005, 16:29 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
nicky555 написал:
Согласен с T (в первом абзаце :wink: ): FOR ALL ENTRIES - это UNION - отсюда и все, что с ним связано, в том числе и Full Scan.


Речь об уникальности возвращаемых записей?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: select * ...where bname in itab
СообщениеДобавлено: Пн, май 23 2005, 16:31 
Президент
Президент

Зарегистрирован:
Вт, авг 17 2004, 08:17
Сообщения: 3150
Откуда: В ВЕЧНОМ БАНЕ
Egal написал:
в очень многих случаях FOR ALL ENTRIES значительно медленнее, чем просто SELECT ... APPENDING ... в цикле по intab ...

А в ряде случаев получается полный перебор таблицы, если внутри таблицы пусто :shock:
Так что с этой конструкцией - поаккуратнее :twisted:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 23 2005, 17:42 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Цитата:
FOR ALL ENTRIES - это UNION

Как-то я глядел в SQL-trace из-под FOR ALL ENTRIES, так не было там UNION, было несколько обычных SELECT'ов.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 23 2005, 18:03 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
Сергей Королев написал:
Цитата:
FOR ALL ENTRIES - это UNION

Как-то я глядел в SQL-trace из-под FOR ALL ENTRIES, так не было там UNION, было несколько обычных SELECT'ов.


Так и есть. Это не SQL UNION. Это объединение результирующих наборов:

SELECT ... FOR ALL ENTRIES IN itab WHERE cond returns the union of the solution sets of all SELECT statements that would result if you wrote a separate statement for each line of the internal table replacing the symbol itab-f with the corresponding value of component f in the WHERE condition


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 23 2005, 21:39 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
T написал:
SELECT ... FOR ALL ENTRIES IN itab WHERE cond returns the union of the solution sets of all SELECT statements

Это конечно, но когда видишь подтверждающий trace, как-то сразу спокойнее :)
вообще, если б кто-то взял да и сравнил на досуге FOR ALL ENTRIES с несколькими обычными SELECTами...

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: select * ...where bname in itab
СообщениеДобавлено: Вт, май 24 2005, 08:38 
Директор
Директор

Зарегистрирован:
Чт, май 12 2005, 11:10
Сообщения: 1038
Пол: Мужской
T написал:
Egal написал:
в очень многих случаях FOR ALL ENTRIES значительно медленнее, чем просто SELECT ... APPENDING ... в цикле по intab ...


:shock: С какой радости-то?
Просто многие забывают, что если передать в FOR ALL ENTRIES пустую таблицу, то считай будет работать как пустой RANGE. То есть будет отбираться всё, что подошло под остальные критерии!

Понятно, что нужно сравнивать в каждом отдельном случае, но если поля будут ключевыми или проиндексированными, то всё будет ОК.


да не знаю я с какой радости. желания и времения разбираться не было.
Но "помню как сейчас" - задача была тривиальная:
выбрал данные в intab1 - таблица точно не пустая, но значений ДОхрена, скажем тысячи (!!! не 10 и не 20 записей - а скажем 10 тысяч записей! ).
потом сделал FOR ALL ENTRIES : естественно по ключу, причём по полному. Такой SELECT работал скажем 10 единици времени.
Потом сделал просто SELECT .... APPENDING ... ENDSELECT. - конструкция стала работать раза в три быстрее... (если не больше чем в три)

Вообще, если мне память не изменяет, сам SAP предупреждал, что пользоваться этой - FOR ALL ENTRIES - конструкцией надо очень аккуратно. (действительно, хотя бы потому что если таблица вдруг будет пустой - то получим бааальшой бОнус!)

Ну если в чёмто не прав - попраФте! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: select * ...where bname in itab
СообщениеДобавлено: Вт, май 24 2005, 13:00 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, авг 31 2004, 14:57
Сообщения: 5258
Откуда: Ростов невеликий
Пол: Мужской
Egal написал:
Ну если в чёмто не прав - попраФте! :)

фиг его знает...что-то for all entries не отработал..- а разбираться некогда )) сделал с loop-ом
p.s. хотя странно - раньше работало и всё вроде ок ...вроде тривиально всё
form fill_users.
select * into users from usr01
for all entries in uname_ where bname = usr01-bname.
./,/,.m.,m
endselect.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: select * ...where bname in itab
СообщениеДобавлено: Вт, май 24 2005, 13:12 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
Skif написал:
select * into users from usr01
for all entries in uname_ where bname = usr01-bname.
./,/,.m.,m
endselect.


Вместо usr01 нужен uname_
И лучше сделать SELECT .. INTO TABLE..., а не SELECT..ENDSELECT, хотя как желашь..


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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