Текущее время: Вт, май 22 2018, 15:43

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: UPDATE в цикле
СообщениеДобавлено: Ср, янв 17 2018, 22:31 
Начинающий
Начинающий

Зарегистрирован:
Ср, янв 17 2018, 22:22
Сообщения: 3
Добрый день!
Подскажите, пожалуйста.
Как можно заменить UPDATE в цикле

Code:
    LOOP AT mt_data REFERENCE INTO DATA(lr_data).
  UPDATE zsd_nrv
            SET zprpst = ''
            WHERE zmode IN ('1', '2', '3')
              AND gjahr = lr_data->gjahr
              AND monat = lr_data->monat
              AND bukrs = lr_data->bukrs
              AND werks = lr_data->gjahr
              AND matnr = lr_data->matnr.
    ENDLOOP.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: UPDATE в цикле
СообщениеДобавлено: Чт, янв 18 2018, 01:59 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 17:44
Сообщения: 2920
Откуда: Москва
Заменить
Code:
AND werks = lr_data->gjahr

на
Code:
AND werks = lr_data->WERKS

:wink:
А если серьезно, при такой постановке задачи можно лишь уменьшить количество проходов цикла за счет удаления повторяющихся записей в mt_data по полям условия и делать COMMIT WORK через N записей..

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UPDATE в цикле
СообщениеДобавлено: Чт, янв 18 2018, 08:07 
Начинающий
Начинающий

Зарегистрирован:
Ср, янв 17 2018, 22:22
Сообщения: 3
Да, я понимаю.
Понимаю, что можно считать все записи из этой таблицы заранее во внутреннюю таблицу, а потом передать таблицу в UPDATE, но этот вариант по оптимальности тоже не очень.
Есть ли более оптимальные решения?
Подскажите, пожалуйста. Если кто знает такой вариант.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: UPDATE в цикле
СообщениеДобавлено: Чт, янв 18 2018, 11:26 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 10:41
Сообщения: 145
Если данные mt_data можно вытащить из БД, то можно попробовать поизвращаться таким способом:
Code:
UPDATE zsd_nrv
  SET zprpst = ''
  WHERE zmode IN ('1', '2', '3')
    AND EXISTS ( SELECT 1 FROM zsd_data
                                     WHERE gjahr = zsd_nrv~gjahr
                                       AND monat = zsd_nrv~monat
                                       AND bukrs = zsd_nrv~bukrs
                                       AND werks = zsd_nrv~gjahr
                                       AND matnr = zsd_nrv~matnr
               ).


Если данные только во внтуренней таблице, то да: ставят блокировки, считывают нужные данные во внутреннюю таблицу, меняют в ней всё необходимое, а потом пишут:
Code:
UPDATE zsd_nrv FROM TABLE mt_data.

В версионных БД всё равно при изменениях будут записываться новые строки, а старые строки помечаться как удалённые, поэтому всё равно обновляется только одно поле или же целая строка.
А вот как себя HANA ведёт в таких случаях, к сожалению, не знаю, но, думаю, что обновление одного поля для неё будет лучше.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: UPDATE в цикле
СообщениеДобавлено: Чт, янв 18 2018, 19:15 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 19:21
Сообщения: 1057
UKY написал(а):
В версионных БД всё равно при изменениях будут записываться новые строки, а старые строки помечаться как удалённые, поэтому всё равно обновляется только одно поле или же целая строка.
А вот как себя HANA ведёт в таких случаях, к сожалению, не знаю, но, думаю, что обновление одного поля для неё будет лучше.

это во всех БД где есть транзакционная изоляция. в хане так и работает.
апдейт через таблицу в любом случае быстрее - там используется пакетный интерфейс (а не просто SQL запрос).

_________________
я твой сап эфай внедрял
BAdI-позитив


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: UPDATE в цикле
СообщениеДобавлено: Пт, янв 19 2018, 02:26 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 17:44
Сообщения: 2920
Откуда: Москва
art9-3 написал(а):
но этот вариант по оптимальности тоже не очень.
Есть ли более оптимальные решения?

Вы оптимальность по каким критериям меряете?
Попробуйте на практике варианты, которые вам предложили, сравните. :wink:

_________________
С уважением,
Удав.


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

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


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

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


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

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