Eine datenbanktabelle in eine interne tabelle kopiren

Getting started ... Alles für einen gelungenen Start.
10 Beiträge • Seite 1 von 1
10 Beiträge Seite 1 von 1

Eine datenbanktabelle in eine interne tabelle kopiren

Beitrag von swonny (Specialist / 101 / 10 / 1 ) »
Hallo,

bin ein ABAP Anfänger und müsste Daten von einer Tabelle in eine interne Tabelle kopieren um diese weiter zu bearbeiten. Die Tabelle hat sehr viele Spalten. Müsste ich jetzt wenn ich eine interne Tabelle erstellen möchte alle Spalten unter TYPES: definieren? gibt es da nicht eine einfacherere Lösung?

Danke schonmal für die Hilfe.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von DeathGuardian (Expert / 759 / 0 / 3 ) »
Du kannst auch genz Tabellen so definieren wie schon vorgegebene.
Hier ein Beispiel:

Code: Alles auswählen.

DATA: itab TYPE TABLE OF mara. "MARA ist ne Tabelle im DDIC

Beitrag von axel.mohnen (ForumUser / 18 / 0 / 0 ) »
Hallo,

Beispiel:
data: lt_sflight type table of sflight.

select * from table sflight into table lt_sflight where ......


Viele Grüße

Axel

Beitrag von swonny (Specialist / 101 / 10 / 1 ) »
wow super, ich danke Euch für die schnelle hilfe. :wink:

Beitrag von horo (ForumUser / 9 / 0 / 0 ) »
Hallo,

Ich versuchs mal:

* Definition deiner internen Tabelle
DATA: itab_beispiel TYPE TABLE OF beispielTabelle

* Feldsymbol definieren
FIELD-SYMBOLS: <wa_itab_beispiel> TYPE beispielTabelle.

* Füllen der internen Tabelle aus deiner DB Tabelle heraus
*(alle Felder)
SELECT * FROM beispielTabelle
INTO TABLE itab_beispiel
WHERE ....

IF sy-subrc EQ 4.
Fehlerbehandlung (nichts gefunden usw)....
ENDIF.

* Durchlaufen der internen Tabelle
LOOP AT itab_beispiel ASSIGNING <wa_itab_beispiel>.
* Hier folgt die Behandlung der aktuellen Zeile, ansprechen tust du diese
* über das Feldsymbol "<wa_itab_beispiel>".
WRITE: / <wa_itab_beispiel>-Feldname_deiner_Tabelle.
ENDLOOP.

So. Hoffe ich habe in der Eile keine Fehler gemacht und es hilft dir weiter...

Gruss,
horo
Zuletzt geändert von horo am 02.11.2006 16:18, insgesamt 1-mal geändert.

Beitrag von swonny (Specialist / 101 / 10 / 1 ) »
Danke für die ausführliche hilfe. Ich habe mein Problem lösen können. Ich bin über die schnelle hilfe erstaunt. :wink:

Beitrag von Grayhound (ForumUser / 37 / 0 / 0 ) »
Hi,
verwende NIEMALS select *, sondern lies IMMER exakt die Felder, die Du wirklich brauchst. Also: select Feld1 Feld2 Feld3.........into table itab... Dafür legst Du eine entsprechende interne Tabelle an.

Grayhound

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Grayhound hat geschrieben:Hi,
verwende NIEMALS select *, sondern lies IMMER exakt die Felder, die Du wirklich brauchst. Also: select Feld1 Feld2 Feld3.........into table itab... Dafür legst Du eine entsprechende interne Tabelle an.

Grayhound
Hallo Grayhound,

ich kann leider Deiner Anmerkung so nicht zustimmen.
Es ist zwar richtig, dass man durch explizites Nennen der gewünschten Spalten einen Performancegewinn erzielen kann. Es gibt aber etliche Fälle, wo man die gesamte Zeile der DB-Tabelle braucht.
Ein typischer Fall findest Du bei der Entwicklung einer vollständigen Anwendung, wo z.B. der Kunde eigene Felder an die Tabelle angehängt hat und es auch grundsätzlich möglich ist, dass sich dies auch noch ändert.
Wenn Du nun im Programm die Feldliste fest vorgibst, fehlen neue Felder oder das Programm dumpt direkt, weil Felder entfernt wurden...

Somit kann ich Deiner Bedingung nur dann zustimmen, wenn es um einen reinen Auswertereport geht, bei dem es auf Performance ankommt und die Wahrscheinlich von Änderungen an DB-Tabellen mit Relevanz zum Report gering ist.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Grayhound (ForumUser / 37 / 0 / 0 ) »
Hallo ereglam,
natürlich gibt es (äußerst seltene) Fälle, in denen ich sinnvollerweise die ganze Tabelle lese. Ich will nur darauf aufmerksam machen, was das für Folgen hat und dies ist gerade Anfängern nicht bewußt. So schrieb swonny ausdrücklich: 'die Tabelle hat sehr viele Felder'.
Typische Tabellen sind doch z.B. kna1, mara usw. Und wie viele Felder davon braucht man in einem Programm wirklich? Alle? Habe ich noch nicht erlebt und ich programmiere auch schon seit 10 Jahren.
Und wenn ich da Daten anfüge, mache ich das typischerweise am Ende. Einen direkten Dump, weil irgendwo Felder angefügt wurden, habe ich auch noch nicht erlebt. Klar, dass das Programm dann erweitert werden muss wenn ich die Felder sehen will aber das ist eine Änderung, die ich in 10 Minuten fertig habe. Und wenn man das mal in's Verhältnis zur Laufzeit setzt, wenn z.B. ein Programm täglich läuft.....
Sprechen wir mal vom wahren SAP-Leben. Da sind mir Programme untergekommen, die Laufzeiten von 7 Stunden hatten. Schön mit select * und geschachteltem Loop. Ich konnte durch geschicktes lesen der genau benötigten Daten die Laufzeit auf 10 Minuten bringen.
Ich bleibe dabei: Genau die benötigten Daten lesen. Die Sonderfällt, bei denen es anders ist, sind exotisch und nicht erwähnenswert.
Schönen Tag noch,
Grayhound

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo Grayhound,

Ich wehre mich eigentlich nur gegen Deine Verwendung der Begriffe 'NIEMALS' und 'IMMER'. Wenn Du mal hier im Forum suchst, wirst Du den einen oder anderen Betrag von mir finden, wo ich auf bestimmte Aspekte hingewiesen habe. Du wirst jedoch keine finden, wo ich einen solche sprachliche Zwangsformulierung benutzt habe. Ein freundlicher Hinweis, dass man es lieber so machen sollte, klingt einfach viel besser... ;-)

Du hast jedoch vollkommen recht damit, dass man durch geschicktes Benutzen des ABAP-Sprachumfangs etliche Performanceflaschenhälse entschärfen kann. Allerdings ist dann auch darauf hinzuweisen, dass einige der SAP-Programme vor vielen Jahren entwicklet wurden, also bestimmte Sprachkonstrukte noch nicht zur Verfügung standen.
Es gibt natürlich auch Programmierer, die sich den gesamten Sprachumfang des ABAP nicht kennen und deshalb alternative Lösungen benutzen, die nicht immer so performant sind.
Übrigens zähle ich mich auch dazu, obwohl ich auch schon seit etlichen Jahren im Geschäft bin. Wenn ich jedoch über Neues finde, lese ich i.d.R. die Hilfe dazu, weil ich es ja zukünftig gebrauchen könnte...

PS:
Dumps treten nicht auf, weil man Felder ergänzt hat, sondern welche gelöscht hat, die dann in einem Programm namentlich angesprochen wurden...
PPS:
es gibt Kunden, die es nicht so gerne sehen, wenn sie ein neues Feld in z.B. die MARA (per APPEND) einfügen und dann erst einmal alle (Kunden-)Programme durchgehen müssen, um das neue Feld dort berücksichtigt zu bekommen...

Fazit:
m.E. es hängt immer von der Anwendung ab, wie man die Daten selektiert. Bei Auswertungen über große Datenbestände ist eine selektive Feldauswahl durchaus sinnvoll, aber in einer Dialoganwendung ist in vielen Fällen wegen der Interaktionswartezeiten der Performanceaspekt reduziert zu sehen.
Das soll aber nicht heißen, dass ich immer eine *-Selektion benutze, blos weil es schneller programmiert ist.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Seite 1 von 1

Vergleichbare Themen

1
Antw.
7663
Views
interne Tabelle in Datenbanktabelle kopieren
von muffel » 20.08.2010 15:55 • Verfasst in ABAP® für Anfänger
1
Antw.
759
Views
Datenbanktabelle Daten aus interne Tabelle schreiben
von L0w-RiDer » 05.12.2018 11:13 • Verfasst in ABAP® für Anfänger
4
Antw.
227
Views
5
Antw.
1248
Views
Inhalt interne Tabelle an andere interne Tabelle übergeben
von L0w-RiDer » 30.01.2020 16:28 • Verfasst in ABAP® für Anfänger
5
Antw.
3004
Views
interne Tabelle in andere interne Tabelle (Format)
von Gast » 20.10.2004 14:44 • Verfasst in ABAP® Core

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.