Текущее время: Ср, июл 23 2025, 22:38

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: SELECT ... ENDSELECT
СообщениеДобавлено: Чт, май 31 2012, 07:13 
Начинающий
Начинающий

Зарегистрирован:
Вт, окт 12 2010, 19:57
Сообщения: 14
Сразу хочу оговориться, что вопрос скорее конструктивного-познавательность типа, чем практического, т.к. данную конструкцию запросов не использую, но часто встречаю в старых программах. Я кроме минусов данной конструкции ни чего не вижу положительного, отладка внутри select...endselect часто валится в дамп, время обращения к серверу увеличивается по сравнению с обычным select"ом + не оптимальные условия внутри конструкции, могут привести к еще большей задержке. Хотелось бы узнать какое либо преимущество данной конструкции перед обычным select"ом. Или это все таки атавизм который SAP продолжает поддерживать?
Спасибо.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: SELECT ... ENDSELECT
СообщениеДобавлено: Чт, май 31 2012, 07:55 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Ну например:
1. Вытащить только одну запись по не очень четко заданному условию, например бухгалтерский документ с максимальной датой проводки:
Code:
select * from bkpf up to 1 rows
  where ....
  order by budat descending.
endselect.
Понятно что это можно сделать без использования select...endselect, но так достаточно просто и наглядно

2. Обработка больших объемов данных, которые нет смысла целиком тащить во внутренние таблицы - например посчитать какую либо статистику, но запросом это сделать не получится - тогда select...endselect в сочетании с PACKAGE SIZE самое на мой взгляд подходящее решение

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SELECT ... ENDSELECT
СообщениеДобавлено: Чт, май 31 2012, 08:15 
Начинающий
Начинающий

Зарегистрирован:
Вт, окт 12 2010, 19:57
Сообщения: 14
ArmAnn написал:
2. Обработка больших объемов данных, которые нет смысла целиком тащить во внутренние таблицы - например посчитать какую либо статистику, но запросом это сделать не получится - тогда select...endselect в сочетании с PACKAGE SIZE самое на мой взгляд подходящее решение


А разве не проще сделать UPDATE?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: SELECT ... ENDSELECT
СообщениеДобавлено: Чт, май 31 2012, 08:30 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
nikolay1880 написал(а):
ArmAnn написал:
2. Обработка больших объемов данных, которые нет смысла целиком тащить во внутренние таблицы - например посчитать какую либо статистику, но запросом это сделать не получится - тогда select...endselect в сочетании с PACKAGE SIZE самое на мой взгляд подходящее решение


А разве не проще сделать UPDATE?

Если возможно апдейтом - то конечно лучше апдейтом. Но бывает что нужно считать какой нибудь сложный показатель, алгоритм расчета которого вы в апдейт (или селект) не запихнете - вот тогда и пригождается select...endselect. Или вот как то видел - раз в месяц по HRным данным считали какую то статистику, причем за все предыдущие периоды. Статистика собиралась раз в месяц, запускалось фоновое задание на ночь - тут нет смысла исхищряться и придумывать сложные решения

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SELECT ... ENDSELECT
СообщениеДобавлено: Чт, май 31 2012, 08:34 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, апр 18 2012, 14:20
Сообщения: 252
Откуда: РБ, г. Гомель
Пол: Мужской
nikolay1880 написал(а):
А разве не проще сделать UPDATE?

не уловил связь между UPDATE и SELECT ... ENDSELECT
в SELECT разве можно менять данные в БД?

вобще UPDATE в SAP коварная штука
в силу того, что полно дублирующих полей в связанных таблицах, можно так наапдэйтить :shock:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SELECT ... ENDSELECT
СообщениеДобавлено: Чт, май 31 2012, 08:54 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
MantiCore1977 написал:
не уловил связь между UPDATE и SELECT ... ENDSELECT

Например проапдейтить Z-поле в BSEG, где будет находиться расчетная сумма - скажем в зимбабвийских долларах по курсу на дату выравнивания, помимо уже имеющихся в документе рублей, долларов и евро

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SELECT ... ENDSELECT
СообщениеДобавлено: Чт, май 31 2012, 10:30 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, окт 21 2006, 20:34
Сообщения: 280
SELECT ... ENDSELECT позволяет заполнить хеш или сортед вн.таблицы с уникальным ключом если записи в таблице БД не с уникальными значениями этих полей. Если использовать обычный SELECT into table то будет дамп - нарушения уникальности


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SELECT ... ENDSELECT
СообщениеДобавлено: Чт, май 31 2012, 15:10 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, апр 24 2007, 15:56
Сообщения: 1402
ArmAnn написал:
Вытащить только одну запись по не очень четко заданному условию

+1
для использования команд, которые не разрешены вместе с приставкой SINGLE,
например "UP TO 1 ROWS" + "FOR ALL ENTRIES IN"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SELECT ... ENDSELECT
СообщениеДобавлено: Пт, июн 01 2012, 08:06 
Менеджер
Менеджер

Зарегистрирован:
Вт, дек 06 2005, 17:52
Сообщения: 559
А в чем сакральный смысл SINGLE по сравнению с UP TO 1 ROWS?
А UP TO 1 ROWS вроде разрешено вместе с FOR ALL ENTRIES IN.

По сабжу - нет ни единой конструкции с SELECT/ENDSELECT, которую нельзя было бы заменить выборкой во внутреннюю таблицу с последующим циклом по ней. Просто иногда это более геморройно, чем написать SELECT/ENDSELECT.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SELECT ... ENDSELECT
СообщениеДобавлено: Пт, июн 01 2012, 18:53 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, апр 24 2007, 15:56
Сообщения: 1402
Sergeant написал(а):
А в чем сакральный смысл SINGLE по сравнению с UP TO 1 ROWS?
А UP TO 1 ROWS вроде разрешено вместе с FOR ALL ENTRIES IN.

В том что FOR ALL ENTRIES IN не разрешено вместе с SINGLE


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SELECT ... ENDSELECT
СообщениеДобавлено: Пн, июн 04 2012, 17:32 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Еще удобно для отладки перед тем, как объединить в JOIN.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SELECT ... ENDSELECT
СообщениеДобавлено: Вт, июн 05 2012, 11:13 
Менеджер
Менеджер

Зарегистрирован:
Вт, дек 06 2005, 17:52
Сообщения: 559
troy написал(а):
Sergeant написал(а):
А в чем сакральный смысл SINGLE по сравнению с UP TO 1 ROWS?
А UP TO 1 ROWS вроде разрешено вместе с FOR ALL ENTRIES IN.

В том что FOR ALL ENTRIES IN не разрешено вместе с SINGLE


Так я ведь и спрашиваю - в чем разница между SINGLE и UP TO 1 ROWS, которая вроде разрешена?
Может я не знаю чего.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SELECT ... ENDSELECT
СообщениеДобавлено: Вт, июн 05 2012, 11:39 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Sergeant написал(а):
Так я ведь и спрашиваю - в чем разница между SINGLE и UP TO 1 ROWS, которая вроде разрешена?
Может я не знаю чего.

select single чуть короче - у вас нет закрывающего endselect :)
По поводу разницы быстродействии/нагрузке на БД - ИМХО никакой разницы, select single можно просто считать упрощенной формой записи select ... up to 1 rows .... endselect

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SELECT ... ENDSELECT
СообщениеДобавлено: Вт, июн 05 2012, 11:53 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, ноя 18 2008, 10:40
Сообщения: 342
Откуда: Пермь
Пол: Мужской
Если в условии where с select single не задан полный ключ таблицы, расширенная проверка выдает предупреждение и рекомендацию заменить конструкцию на UP TO 1 ROWS. Видимо select single предполагается применять когда вы точно уверены, что найдется не более одной строки, а UP TO 1 ROWS когда выбираете первую строку из множества


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SELECT ... ENDSELECT
СообщениеДобавлено: Ср, июн 06 2012, 08:40 
Ассистент
Ассистент

Зарегистрирован:
Чт, июл 28 2011, 13:20
Сообщения: 35
Удобно брать строки начиная с заданной:
Code:
  select * from ekko into corresponding fields of
                                         ln_ekko up to upto rows
     where
               bedat in  s_edat.
    if sy-dbcnt > skip.                  "Для выборки с заданной записи
      append ln_ekko to lt_ekko.
    endif.
  endselect.


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

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


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

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


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

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