Strona 1 z 1

Dopisanie wielu rekordów do 1 tabeli LOOP

: śr lip 17, 2019 11:08 am
autor: sylwia123
Cześć, mam mały problem z napisaniem LOOPa/selekta.
Cel jest taki, żeby do tabelki gt_anla dopisały mi się rekordy z tabeli ANLA z kryterium tabelki S_ANLA. Czyli w S_ANLA mamy dwa wiersze z dwoma środkami trwałymi. Chcę te dwa środki trwałe wstawić z BUKRS i ANLN2 do tabeli gt_anla.

W wyniku mojego kodu LOOP chodzi po s_anla i dopisuje środek trwały, ale w każdej kolejnej iteracji zastępuje dopisany wiersz nowym a nie dodaje kolejnego. Jak to poprawic??

Kod: Zaznacz cały

  LOOP AT s_anla.
select bukrs anln1 anln2 from anla into table gt_anla where anln1 EQ s_anla-low.
  ENDLOOP.

Re: Dopisanie wielu rekordów do 1 tabeli LOOP

: śr lip 17, 2019 11:27 am
autor: ZETKA
APPENDING TABLE a nie INTO TABLE ewentualnie.

Re: Dopisanie wielu rekordów do 1 tabeli LOOP

: śr lip 17, 2019 11:34 am
autor: sylwia123
ZETKA ślicznie dziękuję!!! działa :) :) :)

Re: Dopisanie wielu rekordów do 1 tabeli LOOP

: czw lip 18, 2019 8:45 am
autor: dominik.tylczynski
sylwia123 pisze: śr lip 17, 2019 11:34 am ZETKA ślicznie dziękuję!!! działa :) :) :)
Działać, działa - pytanie jak działa i czy działa optymalnie.
Generalnie należy uważać z SELECT wewnątrz pętli LOOP. SELECT wykona się tyle razy ile masz rekordów w tablicy wewnętrznej. Jeśli tych rekordów będzie dużo i jeśli tablica, z której robisz SELECT jest duża całość może się wykonywać długo, a nawet bardzo długo.

Zamiast SELECT w pętli możesz wykorzystać konstrukcję

Kod: Zaznacz cały

SELECT ... FOR ALL ENTRIES IN ...
Zobacz dokumentację na SAP Help: SELECT - FOR ALL ENTRIES

W Twoim przypadku mogłoby to zapytanie wyglądać następująco:

Kod: Zaznacz cały

SELECT bukrs anln1 anln2 
FROM ANLA 
FOR ALL ENTRIES IN s_anla 
WHERE anln1 = low 
INTO TABLE gt_anla

Re: Dopisanie wielu rekordów do 1 tabeli LOOP

: czw lip 18, 2019 2:01 pm
autor: sylwia123
Dziękuję :) zaraz popatrzę na wyniki w debugerze i ewentualnie podmienię kod :)