Dodaj do ulubionych

ABAP: Z jednej wewnętrznej tabeli do drugiej

11.01.06, 17:10
Witam wszystkich,

Natknąłem się na następujący problem w ABAPie.

Mam dwie tabele wewnętrzne. Obie o tej samej strukturze.
Pierwszą chcę przefiltrować i wynik umieścić w pustej
drugiej. Nie znalazłem innego rozwiązania niż poniższe
a nie jest ono według mnie eleganckie:

* tabela nr 1: i_first
* tabela nr 2: i_second
* pola: field1, field2

LOOP AT i_first WHERE field1 = "aeroplane" AND
field2 = "2006/03".
APPEND i_first TO i_second
ENDLOOP.

Chyba, że nie ma innego wyjścia.

Pozdrawiam,
Marek
Edytor zaawansowany
  • 11.01.06, 20:08
    bez stresu mozesz tak zostawic.
  • 11.01.06, 20:42
    Heja
    a po co tak czarowac
    nie lepiej tak :)

    i_second[] = i_first[].
    delete i_second where field1 ne "aeroplane" or field2 ne "2006/03".

    pozdro
    krzysiek
  • 12.01.06, 15:03
    Z tym, że zamiast OR użyć AND.
    Najprawdopodobnjiej będzie to też wolniejsze rozwiązanie
    (zależnie od typy i_first).

    BTW
    Czy nie powinno być MOVE zamiast APPEND w pętli...
  • 12.01.06, 19:01
    Czesc,
    Wiesz obawiam sie ze nie masz racji co do tego or i and.
    Słyszałeś kiedyś o algebrze boola ;)
    not (a i b) = not a or not b
    gosciu chcial skopiowac rekordy w których pola mialy jakies wartosci w obu na
    raz. To teraz jesli ja chce usanac te co nie pasuja to wystarczy ze w jednym z
    tych pol nie bedzie odpowiedniej wartosci. Jak chcesz to sobie rozpisz, sa tylko
    4 mozliwosci :)

    co do szybkosci rozwiazania to obawiam sie ze moze byc szybsze, zajmować mniej
    pamieci itp itd. wszystko zalezy od tego jak z interpreterze abapa
    zaimplementowano pewne sprawy.

    a co do petli to powinno byc append, oczywiscie tabela powinna miec swoj naglowek :)
    pozdro
    krzysiek
  • 12.01.06, 19:48
    Krzysiek, co ty doktorat jakiś piszesz czy co? :-)
    pozdrawiam.
    DMU
  • 12.01.06, 21:06
    z kąd wiedziałeś ;)
  • 13.01.06, 07:38
    Wiesz, obawiam się, że jednak możesz mieć rację co do tego OR czy AND.
    Zbyt pobieżnie spojrzałem na problem. Uściślając i dodając materiały do pracy
    doktorskiej:
    ~(p AND q) <=> (~p OR ~q) - prawo de'Morgana zaprzeczenie koniunkcji (eksluzja).

    Pozdrawiam,
    Radek
  • 13.01.06, 07:43
    Powinno być "ekskluzja", bo się jeszcze ktoś przyczepi ;)
  • 13.01.06, 10:10
    Hej,
    Nie o to chodzi zebym sie czepiał, chciałem tylko wyjaśnić zagadnienie
    teoretycznie ;-)
    pozdro
    krzysiek
  • 13.01.06, 10:48
    I przyznaję - miałeś rację.

    Pozdrawiam,
    Radek
  • 13.01.06, 15:47
    Ty to się lepiej weź do roboty, a nie będziesz się wymądrzał Ty studenciku ... ;)
  • 13.01.06, 20:11
    Ty to lepiej nic nie mów, bo napisze co zrobiłeś swojej kotce i jakie były tego
    powody :-P
    Krzysiek
  • 12.01.06, 21:10
    Dla oceny wydajności takiej czy innej implementacji warto rzucić okiem do
    transakcji SE83: Environment -> Performance examples. Jest tam przykład dot.
    kopiowania zawartości tabel. Polecam.

    --
    Dominik
    www.icg.pl
  • 13.01.06, 16:57
    Panowie,

    Dziękuję za pomoc. Pozostaję mimo wszystko przy oryginalnym
    rozwiązaniu.

    Myślałem że można zrobić coś takiego

    READ i_table1 INTO i_table2 WHERE field1 = "aeroplane".

    Ale to nie jest możliwe.

    Dziękuję Wam serdecznie za pomoc,
    Marek

Popularne wątki

Nie pamiętasz hasła lub ?

Zapamiętaj mnie

Nie masz jeszcze konta? Zarejestruj się

Nakarm Pajacyka
Agora S.A. - wydawca portalu Gazeta.pl nie ponosi odpowiedzialności za treść wypowiedzi zamieszczanych przez użytkowników Forum. Osoby zamieszczające wypowiedzi naruszające prawo lub prawem chronione dobra osób trzecich mogą ponieść z tego tytułu odpowiedzialność karną lub cywilną. Regulamin.