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

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


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


ВНИМАНИЕ!

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



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

Зарегистрирован:
Ср, янв 17 2018, 21:22
Сообщения: 36
Пол: Мужской
Добрый день!
Подскажите, пожалуйста.
Как можно заменить 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, 00:59 
Почетный гуру
Почетный гуру
Аватара пользователя

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

на
Code:
AND werks = lr_data->WERKS

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

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


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

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


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

Зарегистрирован:
Вт, июн 10 2014, 09:41
Сообщения: 179
Если данные 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, 18:15 
Почетный гуру
Почетный гуру
Аватара пользователя

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

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

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


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

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

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

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


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

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


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

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


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

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