spezielle select-abfrage

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
10 Beiträge • Seite 1 von 1
10 Beiträge Seite 1 von 1

spezielle select-abfrage

Beitrag von TobiB (ForumUser / 38 / 0 / 0 ) »
hallo,

ich sollen ne abfrage schreiben bei der das Betragsfeld auf mehrer felder aufgetielt werden soll.

in der tabelle stehn im betragsfeld pos und neg beträge.

die pos beträge sollen in das itab-feld Forderungen und die neg beträge in das itab-feld verbindlichkeiten.

kann ich des ganze in ner select-schleife so definiern oder muß des ganze über nen loop passiern?

hab da nämlich keine ahung wie des gehn soll, aber ich glaub ihr könnt mir dabei helfen.
gruß tobi


Wer fehler Findet, darf se behalten :D

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


Beitrag von BlackMail (ForumUser / 79 / 0 / 0 ) »
Hallo TobiB,
TobiB hat geschrieben:kann ich des ganze in ner select-schleife so definiern oder muß des ganze über nen loop passiern?
der Programmierer von heute benutzt eigentlich keine SELECT-Schleifen mehr :shock:

Meine Empfehlung: SELECT ... INTO TABLE ... + Loop. Damit bist Du in der Regel schneller.

Gruß BlackMail.

Beitrag von JDO (ForumUser / 45 / 0 / 3 ) »
Hallo,
der Programmierer von heute benutzt eigentlich keine SELECT-Schleifen mehr
ja, das ist leider nur zu wahr.

Deshalb läuft die Tabelle SNAP täglich über mit Kurzdumps wg. Speicherproblemen in Zusammenhang mit internen Tabellen (gleichmäßig verteilt auf Standard- und kundeneigene Programme).

Deshalb steht der 'Programmierer von heute' vor unlösbaren Problemen, wenn er mal 'ne DB-Tabelle lesen muß, die nicht in eine interne Tabelle paßt.

Deshalb muß die Hardware mit Unmengen von Speicher aufgerüstet werden, damit überhaupt noch was läuft.

So, das mußte mal gesagt werden...

MfG Jürgen

Beitrag von ralf.wenzel (Top Expert / 3950 / 202 / 281 ) »
JDO hat geschrieben:Deshalb läuft die Tabelle SNAP täglich über mit Kurzdumps wg. Speicherproblemen in Zusammenhang mit internen Tabellen (gleichmäßig verteilt auf Standard- und kundeneigene Programme).
Du findest es besser die DB mit Anfragen nach Einzelsätzen zuzutackern?


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Beitrag von JDO (ForumUser / 45 / 0 / 3 ) »
Hallo Ralf,
Du findest es besser die DB mit Anfragen nach Einzelsätzen zuzutackern?
Nein.

Es gibt es nur zwei Möglichkeiten, Einzelsätze aus der Datenbank zu lesen: SELECT SINGLE mit vollqualifiziertem Schlüssel oder ein SELECT...ENDSELECT, der aufgrund der WHERE-Bedingung nur einen Ergebnissatz liefert.

Ansonsten macht die Datenbank auch beim SELECT...ENDSELECT einen Array Fetch, d.h. es werden immer soviel Datensätze auf einmal gelesen, wie in den (datenbankabhängigen) Puffer passen; das können bei einer knappen Feldliste einige Tausend Sätze sein, wie man beim SQL-Trace sehen kann.

Die Wirkung ist ähnlich wie bei FOR ALL ENTRIES, wobei die Sätze aus der ITAB blockweise gelesen werden.

Im übrigen geht auf der Datenbank auch nicht mehr viel, wenn sich jemand die BSEG mit SELECT INTO TABLE reinzieht.

Der (relativ geringe) Performance-Gewinn des einzelnen Reports geht zum einen auf Kosten der Gesamtperformance des Systems und wird zum anderen in der Regel durch endlose LOOPs über die interne(n) Tabelle(n) wieder verspielt.

Programme mit konsequentem SELECT INTO TABLE haben den schweren Geburtsfehler, daß sie prinzipiell immer zum Kurzdump führen, wenn nur die Datenbasis genügend groß und/oder die Selektionen genügend weit sind.

Ein gutes Programm zeichnet sich aber nicht nur durch gute Performance aus, es sollte darüber hinaus auch kooperativ und skalierbar sein. Die beiden letzten Kriterien sind bei Programmen mit SELECT INTO TABLE in der Regel nicht erfüllt.

MfG Jürgen

Beitrag von ralf.wenzel (Top Expert / 3950 / 202 / 281 ) »
JDO hat geschrieben:Ein gutes Programm zeichnet sich aber nicht nur durch gute Performance aus, es sollte darüber hinaus auch kooperativ und skalierbar sein. Die beiden letzten Kriterien sind bei Programmen mit SELECT INTO TABLE in der Regel nicht erfüllt.
Ich denke, das hängt von der Ausführung ab.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Beitrag von ewx (Top Expert / 4884 / 318 / 644 ) »
JDO hat geschrieben:Ein gutes Programm zeichnet sich aber nicht nur durch gute Performance aus, es sollte darüber hinaus auch kooperativ und skalierbar sein. Die beiden letzten Kriterien sind bei Programmen mit SELECT INTO TABLE in der Regel nicht erfüllt.
Hi Jürgen!
was wären denn Ansätze, um ein Programm "kooperativ und skalierbar" zu machen? Select into table hat natürlich in der Tat Probleme bei riesigen Datenmengen. Aber ein SELECT-ENDSELECT ist dabei meines Erachtens auch nicht die Lösung, sondern ein Blockweises Lesen der Datensätze in eine interne Tabelle. Das mache ich aber nur in Notfällen, weil ich es als sehr aufwändig empfinde. Zudem bin ich mir da auch nicht sicher, welche Methode zum Blockweisen lesen die richtige wäre...
Mach doch mal ein paar Vorschläge, bitte!
:D

Beitrag von BlackMail (ForumUser / 79 / 0 / 0 ) »
JDO hat geschrieben: Deshalb muß die Hardware mit Unmengen von Speicher aufgerüstet werden, damit überhaupt noch was läuft.
Es gibt ja auch noch den Befehl SELECT ... INTO TABLE ... PACKAGE SIZE ...

Gruß BlackMail.

Beitrag von BlackMail (ForumUser / 79 / 0 / 0 ) »
BlackMail hat geschrieben:
JDO hat geschrieben: Deshalb muß die Hardware mit Unmengen von Speicher aufgerüstet werden, damit überhaupt noch was läuft.
Es gibt ja auch noch den Befehl SELECT ... INTO TABLE ... PACKAGE SIZE ...

Gruß BlackMail.
Oh, das hat ewx ja schon geschrieben:
ewx hat geschrieben: Aber ein SELECT-ENDSELECT ist dabei meines Erachtens auch nicht die Lösung, sondern ein Blockweises Lesen der Datensätze in eine interne Tabelle.
NACHTRAG:

Aber um auch nochmal konstruktiv zu sein: Bei SELECT-Schleifen, stößt man auch auf das Problem, dass sich die Programme schlecht debuggen lassen, weil ein COMMIT bei offenem DB-Cursor zum Dump führt.

JDO hat natürlich Recht und das haben ja auch alle schon bestätigt, dass man vernünftig mit dem SELECT ... INTO TABLE umgehen muss. Man liest ja nicht immer eine komplette Tabelle in den Speicher. Und wenn man tatsächlich einmal mehr Daten lesen muss, liegt es in der Verantwortung des Programmierers, den Speicher so schnell wie möglich wieder freizugeben.

Der Speicherbedarf sollte auch dadurch in Grenzen gehalten werden, dass nur die relevanten Felder gelesen werden. Ich habe häufig gesehen, dass mit SELECT * Daten gelesen wurden obwohl das nicht notwendig war. Es ist natürlich auch einfacher, eine interne Tabelle mit Bezug aufs DDIC zu erstellen, als sich selbst eine neue DDIC-Struktur (oder einen programminternen Strukturtyp) mit den relevanten Feldern zu definieren.

Vielleicht hat JDO aber ja tatsächlich noch Tipps, da er sich ja scheinbar gut mit der DB-Kommunikation auskennt.

Gruß BlackMail.

Beitrag von TobiB (ForumUser / 38 / 0 / 0 ) »
Ich find es ja nu echt intressant wohin mein Beitrag/Frage letztendlich geführt hat.

Ich arbeit hauptsächlich mir SELECT und ENDSELECT wobei ich halt nur die nötigsten Felder selektiere und dann immernoch ne WHERE-Klausel einbau.

Ich arbeit jetzt seit gute 2 Monate mit ABAP und darf mir ansich alles selbst erarbeiten, da ne SAP-Schulung für mich als Praktikant net in Frage kommt, daher bin ich für jegliche Hilfe dankbar die ich von euch bekomme.
gruß tobi


Wer fehler Findet, darf se behalten :D

Seite 1 von 1

Vergleichbare Themen

2
Antw.
4148
Views
SELECT - Options & SELECT Abfrage
von Mavrix » 14.05.2007 08:41 • Verfasst in ABAP® für Anfänger
2
Antw.
1894
Views
select abfrage
von anki_86 » 13.06.2007 09:51 • Verfasst in ABAP® für Anfänger
3
Antw.
3079
Views
Select Abfrage - For all Entries
von Cargo2 » 09.12.2016 10:56 • Verfasst in ABAP® Core
5
Antw.
2756
Views
Select Abfrage mit Ausschlusskriterien
von tmxx » 01.04.2008 10:34 • Verfasst in ABAP® für Anfänger
6
Antw.
4109
Views
Select for all entries Abfrage auf Initial
von Murdock » 20.03.2013 11:18 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

FOR mit CORRESPONDING
vor 3 Tagen von sap_enthusiast 11 / 2605
Netzplan drucken
vor 3 Tagen von sap_enthusiast 2 / 665
SALV: Titel zu lang
vor 6 Tagen von ralf.wenzel 3 / 1231
Web Feature Services (WFS) im SAP
vor einer Woche von msfox 1 / 1775

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.

Aktuelle Forenbeiträge

FOR mit CORRESPONDING
vor 3 Tagen von sap_enthusiast 11 / 2605
Netzplan drucken
vor 3 Tagen von sap_enthusiast 2 / 665
SALV: Titel zu lang
vor 6 Tagen von ralf.wenzel 3 / 1231
Web Feature Services (WFS) im SAP
vor einer Woche von msfox 1 / 1775

Unbeantwortete Forenbeiträge

Web Feature Services (WFS) im SAP
vor einer Woche von msfox 1 / 1775
Erweiterung in ME51N/ME52N:
vor 4 Wochen von ABAPlerv 1 / 4060
Erweiterung in ME51N/ME52N:
vor 4 Wochen von ABAPlerv 1 / 3985