Dopisanie wielu rekordów do 1 tabeli LOOP

Jeśli programujesz, administrujesz, integrujesz i masz wątpliwość lub obawę, to właśnie najlepsze miejsce dla Ciebie. Pisz śmiało...
ODPOWIEDZ
sylwia123
Posty: 296
Rejestracja: czw mar 22, 2018 8:39 am
Has thanked: 96 times
Been thanked: 34 times

Dopisanie wielu rekordów do 1 tabeli LOOP

Post 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.
ZETKA
Posty: 69
Rejestracja: czw lis 04, 2010 10:49 pm
Has thanked: 1 time
Been thanked: 71 times
Kontakt:

Re: Dopisanie wielu rekordów do 1 tabeli LOOP

Post autor: ZETKA »

APPENDING TABLE a nie INTO TABLE ewentualnie.
Pozdrawiam,
Krzysiek
sylwia123
Posty: 296
Rejestracja: czw mar 22, 2018 8:39 am
Has thanked: 96 times
Been thanked: 34 times

Re: Dopisanie wielu rekordów do 1 tabeli LOOP

Post autor: sylwia123 »

ZETKA ślicznie dziękuję!!! działa :) :) :)
dominik.tylczynski
Posty: 8325
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 1913 times
Been thanked: 1474 times
Kontakt:

Re: Dopisanie wielu rekordów do 1 tabeli LOOP

Post 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
sylwia123
Posty: 296
Rejestracja: czw mar 22, 2018 8:39 am
Has thanked: 96 times
Been thanked: 34 times

Re: Dopisanie wielu rekordów do 1 tabeli LOOP

Post autor: sylwia123 »

Dziękuję :) zaraz popatrzę na wyniki w debugerze i ewentualnie podmienię kod :)
ODPOWIEDZ