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...
sylwia123
Posty: 252
Rejestracja: czw mar 22, 2018 8:39 am
Has thanked: 68 times
Been thanked: 25 times

Dopisanie wielu rekordów do 1 tabeli LOOP

Post autor: sylwia123 » śr lip 17, 2019 11:08 am

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: 13
Rejestracja: czw lis 04, 2010 10:49 pm
Been thanked: 6 times
Kontakt:

Re: Dopisanie wielu rekordów do 1 tabeli LOOP

Post autor: ZETKA » śr lip 17, 2019 11:27 am

APPENDING TABLE a nie INTO TABLE ewentualnie.
Pozdrawiam,
Krzysiek

sylwia123
Posty: 252
Rejestracja: czw mar 22, 2018 8:39 am
Has thanked: 68 times
Been thanked: 25 times

Re: Dopisanie wielu rekordów do 1 tabeli LOOP

Post autor: sylwia123 » śr lip 17, 2019 11:34 am

ZETKA ślicznie dziękuję!!! działa :) :) :)

dominik.tylczynski
Posty: 7012
Rejestracja: wt kwie 03, 2007 4:05 pm
Has thanked: 999 times
Been thanked: 1023 times
Kontakt:

Re: Dopisanie wielu rekordów do 1 tabeli LOOP

Post autor: dominik.tylczynski » czw lip 18, 2019 8:45 am

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: 252
Rejestracja: czw mar 22, 2018 8:39 am
Has thanked: 68 times
Been thanked: 25 times

Re: Dopisanie wielu rekordów do 1 tabeli LOOP

Post autor: sylwia123 » czw lip 18, 2019 2:01 pm

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

ODPOWIEDZ