Текущее время: Пт, мар 29 2024, 17:38

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: SELECT TOP 100 * по ключевому полю?  Тема решена
СообщениеДобавлено: Пн, сен 13 2004, 15:50 
Гость
можно-ли средствами абап реализовать отбор последовательности 100 записей начиная с некоторой (для нее задан первичный ключ)

например, чтото вроде такого:

select TOP 100 MATNR from MARA
where MARA~MATNR >= 'некий_начальный_номер'.

таблица уже упорядочена по MATNR, т.к. это первичный ключ - т.е. использовать >= вполне допустимо
а вот как TOP n записей реализовать?


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения: Re: SELECT TOP 100 * по ключевому полю?
СообщениеДобавлено: Пн, сен 13 2004, 16:04 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Pavel Berezin написал:
можно-ли средствами абап реализовать отбор последовательности 100 записей начиная с некоторой (для нее задан первичный ключ)

например, чтото вроде такого:

select TOP 100 MATNR from MARA
where MARA~MATNR >= 'некий_начальный_номер'.

таблица уже упорядочена по MATNR, т.к. это первичный ключ - т.е. использовать >= вполне допустимо
а вот как TOP n записей реализовать?


Code:
SELECT ... ORDER BY MATNR DESCENDING.
  if SY-DBCNT gt top-n.
    exit.
  endif.
ENDSELECT.


Или можно попробовать:
http://help.sap.com/saphelp_47x200/help ... ameset.htm

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


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, сен 13 2004, 16:09 
Гость
data: C1 TYPE CURSOR,
N TYPE I,
WA LIKE MARA,
ZAP LIKE MARA OCCURS 0 WITH HEADER LINE.

I = 100.

OPEN CURSOR C1 FOR SELECT * from MARA WHERE .......
DO N TIMES.
FETCH NEXT CURSOR C1 INTO WA.
IF SY-SUBRC NE 0.
EXIT.
ELSE.
APPEND WA TO ZAP.
ENDIF.
ENDDO.


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, сен 13 2004, 16:16 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
По-моему, всё немного попроще.
Code:
SELECT matnr
  INTO wa
  FROM mara
  UP TO 100 ROWS
  WHERE ...
ENDSELECT.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, сен 13 2004, 16:35 
Гость
Так и есть :)
tables: mara.
DATA: T_MARA TYPE TABLE OF MARA,
MAX_ROWS TYPE I VALUE 100.
SELECT * INTO TABLE T_MARA FROM MARA UP TO MAX_ROWS ROWS
WHERE MATNR >= 'некий_начальный_номер' ORDER BY MATNR.


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения: *
СообщениеДобавлено: Вт, сен 14 2004, 06:13 
Гость
спасибо всем ... про UP TO я и не догадался (всётаки синтаксис абап-sql'я довольно своеобразный)

наверно поняли уже - что пытаюст проскакать по всем материалам, но чтобы программа не подвисала надолго
в таблице около 100000 записей, и полный select выполняется очень долго, и юзер ессно не видит на экране результатов ... поэтому последующий loop (с выводом progressbar'а) появляется очень не скоро ... хочется чтобы скакало по таблице "кусками", т.е. считало первые 1000 записей, обработало, на экране пробежал progressbar, потом следующие 1000, снова progressbar, и т.д.


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, сен 14 2004, 06:26 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
А вот это не лучшее решение, потому что увеличение числа запросов к БД ведёт к снижению производительности.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: *
СообщениеДобавлено: Вт, сен 14 2004, 06:41 
Гость
дык в противном случае юзеры волнуются :) ... думают что зависло, начинают звонить

да и вообще - неудобно (не видно, что в данный момент происходит)


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, сен 14 2004, 06:55 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Если на сто тысяч записей простой запрос заставляет волноваться юзеров, то у вас проблема с базисом. Или с юзерами :). А если запрос сложный, то лучше разбить его на несколько и выводить "часики" после того, как отработает каждый из них.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: *
СообщениеДобавлено: Вт, сен 14 2004, 08:27 
Гость
Pavel Berezin написал:
наверно поняли уже - что пытаюст проскакать по всем материалам, но чтобы программа не подвисала надолго
в таблице около 100000 записей, и полный select выполняется очень долго, и юзер ессно не видит на экране результатов ... поэтому последующий loop (с выводом progressbar'а) появляется очень не скоро ... хочется чтобы скакало по таблице "кусками", т.е. считало первые 1000 записей, обработало, на экране пробежал progressbar, потом следующие 1000, снова progressbar, и т.д.


а почему так не устраивает:
Code:
select * from mara ...
* информировать юзера через каждые 100 записей или по условию
endselect.

или слишком долго открывается курсор?


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, сен 14 2004, 08:37 
Специалист
Специалист

Зарегистрирован:
Вт, авг 24 2004, 16:49
Сообщения: 186
Откуда: SAP ERP60
Пол: Мужской
Согласен с предыдущим высказыванием :)
Почему не делать:
- select cnt(*) into nReccount
- select where
...
progress-bar через n строк с процентом выполнения относительно nReccount
...
endselect
и юзерам понравится :) НО тормоза с точки зрения производит-сти

А вообще быстрее будет через select во внутреннюю табличку с последующим лупом и теми-же часиками...


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, сен 15 2004, 06:39 
Гость
выборки из реляционной БД 100 000 записей для диалоговых программ - безумие!!
что-то у вас с постановкой не так.

Что касается проблем сбазисом, то, господа, выборка конечно происходит быстро, только вот результат надо передать по сети, отобразить в gui. Если для отображения используется alv, уверяю вас, что время обработки gui будет существенно выше времени обработки запроса (в данном простейшем случае при примитивной выборке из mara)


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, сен 15 2004, 10:18 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Однозначно так. Только "часики" в этом случае будут уже ни к чему :D .


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, сен 15 2004, 11:01 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 14:35
Сообщения: 1519
Откуда: В ВЕЧНОМ БАНЕ
EGF написал(а):
Однозначно так. Только "часики" в этом случае будут уже ни к чему :D .

Ну да 100000 в диалоге просмотреть это надо очень быть усидчивым человеком... А по поводу часиков, лучше вообще стараться не выводить лишний раз, они диалоговый процесс блокируют-с и производительность нескоко падает из-за этой красивости... Можете попробовать в том же:
Code:
SELECT
ENDSELECT

Поставить вывод часов и потом его убрать и замерять скорость выполнения такой программки, я думаю результаты вас порадуют :P


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, сен 15 2004, 11:16 
Гость
Если у них такой отчет не слетает по max_wprun_time, то пущай любуются :) Навряд ли юзеров будут интересовать все записи. Ну а вообще, нужно приучать их большие отчеты запускать в фоне.


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

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


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

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


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

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