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

Часовой пояс: 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 часа


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

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


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

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