Eine datenbanktabelle in eine interne tabelle kopiren


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

Eine datenbanktabelle in eine interne tabelle kopiren

Beitragvon swonny » 02.11.2006, 15:48

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.
swonny
ForumUser
 
Beiträge: 56
Registriert: 02.11.2006, 15:41
Dank erhalten: 0 mal

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Beitragvon DeathGuardian » 02.11.2006, 15:58

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
DeathGuardian
Expert
 
Beiträge: 762
Registriert: 28.09.2005, 08:31
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Beitragvon axel.mohnen » 02.11.2006, 15:59

Hallo,

Beispiel:
data: lt_sflight type table of sflight.

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


Viele Grüße

Axel
axel.mohnen
ForumUser
 
Beiträge: 18
Registriert: 04.02.2005, 10:50
Dank erhalten: 0 mal

Beitragvon swonny » 02.11.2006, 16:02

wow super, ich danke Euch für die schnelle hilfe. :wink:
swonny
ForumUser
 
Beiträge: 56
Registriert: 02.11.2006, 15:41
Dank erhalten: 0 mal

Beitragvon horo » 02.11.2006, 16:04

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.
horo
ForumUser
 
Beiträge: 9
Registriert: 04.05.2006, 12:25
Dank erhalten: 0 mal

Beitragvon swonny » 02.11.2006, 16:14

Danke für die ausführliche hilfe. Ich habe mein Problem lösen können. Ich bin über die schnelle hilfe erstaunt. :wink:
swonny
ForumUser
 
Beiträge: 56
Registriert: 02.11.2006, 15:41
Dank erhalten: 0 mal

Beitragvon Grayhound » 02.11.2006, 16:41

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
Grayhound
ForumUser
 
Beiträge: 37
Registriert: 07.04.2006, 11:30
Dank erhalten: 0 mal

Beitragvon ereglam » 02.11.2006, 17:19

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
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .
Mitglied im XING
ereglam
Top Expert
 
Beiträge: 1826
Registriert: 30.09.2004, 12:42
Wohnort: Schwalbach am Taunus
Dank erhalten: 4 mal
Ich bin: Entwickler/in

Beitragvon Grayhound » 03.11.2006, 10:02

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
Grayhound
ForumUser
 
Beiträge: 37
Registriert: 07.04.2006, 11:30
Dank erhalten: 0 mal

Beitragvon ereglam » 03.11.2006, 12:58

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
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .
Mitglied im XING
ereglam
Top Expert
 
Beiträge: 1826
Registriert: 30.09.2004, 12:42
Wohnort: Schwalbach am Taunus
Dank erhalten: 4 mal
Ich bin: Entwickler/in


Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
Script in Favoriten
Gestern von bs112 0 Antw.
Daten aus SAP in Excel einfügen
Gestern von bs112 0 Antw.
Scripted calculation view
Gestern von SAP_ENTWICKLER 0 Antw.
Was ist beim Anlegen von sichten zu Beachten
vor 2 Tagen von JohnLocklay 0 Antw.
Tabellenzugehörigkeiten einer Struktur
vor 2 Tagen von black_adept 8 Antw.

  Ähnliche Beiträge beta
Read auf eine interne Tabelle
18.02.2005, 12:58 von Gast 3 Antw.
Eintrag in eine interne Tabelle
19.12.2013, 23:20 von a-dead-trousers 1 Antw.
in eine interne tabelle schreiben mit where bedingung.
27.12.2006, 13:35 von swonny 2 Antw.
Select-Anweisung auf eine interne Tabelle ???
26.06.2013, 09:42 von JHM 5 Antw.
alv grid interne tabelle mit transparenter tabelle abgleiche
07.05.2008, 07:30 von hadde85 10 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

Feedback ...?

Was können wir verbessern? Hinterlasse deine Kontaktdaten, wenn du eine direkte Antwort möchtest.

... Absenden!
cron