LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
33 Beiträge • Seite 1 von 3 (current) Nächste
33 Beiträge Seite 1 von 3 (current) Nächste

LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von nickname8 (Specialist / 134 / 17 / 19 ) »
Hallo Kollegen,

ich wollte mal fragen, was ihr in welchen Fällen nutzt, um eine Zeile einer Tabelle zu betrachten und warum?
Bei neuen Programm/Reports nutze ich so gut wie immer REFERENCE INTO, einfach weil das meiner Meinung nach am Nächsten an OOP dran ist.

Ich sehe aber auch oft, dass innerhalb von Klassen Field-Symbols dafür verwendet werden. Ist ja natürlich generell nicht schlimm, aber ich würde gerne mal von eurem Erfahrungsschatz profitieren.

Grüße

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


Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Von der Funktionsweise her sollten REFERENCE INTO und ASSIGNING gleich funktionieren. Nur dass REFERENCE INTO auch im Kontext einer ganzen Klasse und darüber hinaus und nicht nur einer Methode funktioniert.
Performancetechnisch ist aber ASSIGNING um einen kleinen Deut schneller. Keine Ahnung warum das so ist. Ich hab das vor einigen Jährchen in mehreren Vergleichstests auf 7.01 ausprobiert. Sogar ASSIGNING mit anschließendem GET REFERENCE war um einen geringen Prozentsatz schneller als das REFERENCE INTO :twisted:
Ob das in den neueren Kernels ein anderes Ergebnis liefert, hab ich seither nicht mehr ausprobiert.

Wenn du neu anfängst, würde ich dir gleich zu REFERENCE INTO raten, damit du dich mit den unterschiedlichen Kontexten, wann welcher Befehl verwendet werden kann, gar nicht erst herumschlagen musst. Auf alle Fälle würde ich aber von den Workareas abraten (reines INTO) die machen eine "echte" Kopie der Daten im Speicher und das kostet bei großen Datenmengen einiges an Laufzeit.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
a-dead-trousers hat geschrieben:Nur dass REFERENCE INTO auch im Kontext einer ganzen Klasse und darüber hinaus und nicht nur einer Methode funktioniert
Den Satz verstehe ich nicht.

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

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
ralf.wenzel hat geschrieben:
a-dead-trousers hat geschrieben:Nur dass REFERENCE INTO auch im Kontext einer ganzen Klasse und darüber hinaus und nicht nur einer Methode funktioniert
Den Satz verstehe ich nicht.

Ralf
Ich auch nicht.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von deejey (Specialist / 422 / 129 / 45 ) »
Ich fürchte ohne den Expertenrat von gottfriedstroh kommen wir hier nicht weiter

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
ralf.wenzel hat geschrieben:
a-dead-trousers hat geschrieben:Nur dass REFERENCE INTO auch im Kontext einer ganzen Klasse und darüber hinaus und nicht nur einer Methode funktioniert
Den Satz verstehe ich nicht.
Ich meinte damit, dass man z.B. ein Attribut oder einen Parameter mit REF TO definieren kann und von einem REFERENCE INTO befüllen lassen kann. Somit ist der Inhalt auch in anderen Methoden einer Klasse verwendbar und auch sogar darüber hinaus. Mit Feld-Symbolen (ASSIGNING) geht das ja bekanntlich nicht. Die einzige "globale" Verwendung gibt es hier nur in Programmen bzw. Reports und wenn man so will über "dirty-assigns".
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
Aber wo ist denn jetzt der Vorteil? Bleiben wir mal beim Beispiel eines Parameters.
Du definierst einen Exportparameter vom Typ REF TO MATNR. Ok - das musst du nachher auch mit READ TABLE INTO REFERENCE füllen. Und bei Verwendung des Exportparameters im Aufrufer musst du dann dereferenzieren.
Die Alternative wäre ein Exportparameter vom Typ MATNR. Da müsste dann READ TABLE ASSIGNING und danach eine Zuweisung an den Parameter erfolgen. Dafür kann man sich nachher die Dereferenzierung sparen.

Die Anzahl der Stellen, wo der Exportparameter gefüllt wird ist klar definiert und (bei mir üblicherweise) sehr beschränkt. Die Anzahl der Aufrufer der Methode/Form hingegen ist meist nicht so klar definiert. Daher wäre mein Gedanke das Coding so zu gestalten dass der Aufrufer möglichst einfach an die Sache rangehen kann - und dazu gehört bei mir halt dass ich gerne direkt mit den Rückgabewerten arbeite anstatt sie noch dereferenzieren zu müssen.
( Und ich habe immer das Problem, dass ich an diversen Stellen prüfen muss, ob die Referenz überhaupt gebunden ist, wohingegen ich bei einem "echten" Rückgabeparameter immer von einer existierenden Variablen ausgehen kann )
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Alles richtig, volle Zustimmung.

Wobei Referenzen aber deutlich flexibler sind, was man gelegentlich braucht. In unserer generischen Persistenzschicht wird immer ein REF TO DATA zurückgegeben. Weil die Klasse halt gar nicht weiß, was sie zurückgibt.


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

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
ralf.wenzel hat geschrieben:Alles richtig, volle Zustimmung.

Wobei Referenzen aber deutlich flexibler sind, was man gelegentlich braucht. In unserer generischen Persistenzschicht wird immer ein REF TO DATA zurückgegeben. Weil die Klasse halt gar nicht weiß, was sie zurückgibt.
Genau in so einem Fall verwende ich auch gerne Referenzen. Aber in der Mehrzahl der Fälle ist ein READ TABLE oder LOOP AT ... bei mir eben hinreichend typisiert um darauf verzichten zu können. Und damit komme ich dann auch auf die Originalfrage dieses Threads zurück und kann nur sagen: Ich verwende LOOP ... INTO REFERENCE nur in Ausnahmefällen und nicht wie der OP im Regelfall.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von nickname8 (Specialist / 134 / 17 / 19 ) »
black_adept hat geschrieben:Ich verwende LOOP ... INTO REFERENCE nur in Ausnahmefällen und nicht wie der OP im Regelfall.
Sondern? Field-Symbols?
ralf.wenzel hat geschrieben:In unserer generischen Persistenzschicht wird immer ein REF TO DATA zurückgegeben. Weil die Klasse halt gar nicht weiß, was sie zurückgibt.
Davon würde ich mega-gerne mal ein Datenmodell/Klassendiagram (grob, ohne Betriebsgeheimnisse ;-) ) sehen.

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
nickname8 hat geschrieben:
black_adept hat geschrieben:Ich verwende LOOP ... INTO REFERENCE nur in Ausnahmefällen und nicht wie der OP im Regelfall.
Sondern? Field-Symbols?
Im allgemeinen Feldsymbole, es sei denn die Syntax zwingt mich Workareas zu verwenden. Und ich kann mich nicht entsinnen jemals ein loop into reference gemacht zu haben.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Mir geht es so wie Stefan. Die Notwendigkeit habe ich bisher nicht gesehen...

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

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Ein kleines Anwendungsbeispiel für Datenreferenzen:
In OO sollte ja möglichst viel als "Objekt" abgebildet werden. Daher hab ich schon mehrere Frameworks gebastelt, wo es eine zentrale Datenklasse für einen effizienten (mehrfach)Datenzugriff und darum herum Funktionsklassen für die einzelenen Datensätze gibt. Dieses Funktionsklassen werden z.B. über den Primarykey eines Datensatzes identifiziert und bieten lediglich SET und GET Methoden für die einzelnen Datenfelder. Die eigentliche Datenhaltung bleibt aber in der zentralen Datenklasse und die Funktionsklassen arbeiten nur mit Referenzen auf die Tabellenzeilen in der Datenklasse. Nach außen sind dabei nur die GET und SET Methoden in den Funktionsklassen bzw. READ, SAVE, HAS_CHANGES, GET_DATASET usw. in der Datenklasse sichtbar. Die Datenhaltung ist somit "nahe" an der Datenbank und die Daten müssen so auch nicht "teuer" in die Funktionsklassen kopiert bzw. daraus gelesen werden.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Kannst du das konkreter beschreiben? Klingt danach, als würde ein SET Daten in einer anderen Klasse setzen....


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

Re: LOOP/READ TABLE ... INTO vs REFERENCE INTO vs ASSINGING

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
@adt: Ich glaube! verstanden zu haben was du machst. Aber könntest du jetzt mal ein simples Beispiel zu diesem Anwendungsfall beschreiben, wo du auf eine interne Tabelle mit LOOP at ... INTO REFERENCE arbeitest und wie du das dann nach oben oder unten durch die Methodeninterfaces durchreichst?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Vergleichbare Themen

4
Antw.
8575
Views
Loop zu einem Read Table machen
von cschmoel » 03.09.2012 09:01 • Verfasst in ABAP® für Anfänger
3
Antw.
3734
Views
LOOP über führende interne Tabelle + READ TABLE und MODIFY
von HawkDT » 23.03.2017 13:02 • Verfasst in ABAP® für Anfänger
3
Antw.
3001
Views
read table
von kostonstyle » 27.03.2008 15:38 • Verfasst in ABAP® für Anfänger
2
Antw.
3526
Views
READ TABLE dynamisch aufrufen
von RiffRaff » 27.12.2004 12:04 • Verfasst in ABAP® Core
8
Antw.
9416
Views
Read Table mit MAX Datum und Zeit
von autohandel7 » 23.08.2018 10:54 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor einer Stunde von DeathAndPain gelöst 22 / 2767
Daten an Tabelle binden
vor 6 Stunden von Lukas Sanders 2 / 846

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

Dialog-Container mit Toolbar/Status
vor einer Stunde von DeathAndPain gelöst 22 / 2767
Daten an Tabelle binden
vor 6 Stunden von Lukas Sanders 2 / 846

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2444
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9028