Frage zu Programmcode

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

Frage zu Programmcode

Beitrag von ABAPStud (ForumUser / 6 / 0 / 0 ) »
Hi!

ich habe folgenden SQL Befehl gelesen:

Code: Alles auswählen.

  select single mfrpn into lmfrpn from mara as ma inner join vbap
    as vb on ma~matnr = vb~matnr inner join eqbs as eq on vb~vbeln = eq~kdauf and posnr = eq~kdpos
    where eq~equnr = 5.
Weiß jemand, warum bei posnr keine Tabelle mit ~ angegeben werden muss? Liegt es evlt. daran, dass das Feld nur in vbap vorkommt? (allerdings kommt kdauf auch nur in der Tabelle kdauf vor...?)

Danke!

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


Re: Frage zu Programmcode

Beitrag von ralf.wenzel (Top Expert / 3946 / 201 / 281 ) »
Du hast recht -- bei Eindeutigkeit kann man das weglassen, muss man aber nicht. Ich schreibe es stets hin, aber nicht als Alias.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Frage zu Programmcode

Beitrag von ABAPStud (ForumUser / 6 / 0 / 0 ) »
Hi!

Danke für deine Antwort. Kannst Du mir vielleicht dann auch noch mitteilen, warum ich bei EQ~kdpos die Tilde benötige? Wenn ich die Tilde nicht angebe, erhalte ich eine Fehlermeldung:
SQL Befehl.JPG
Weißt du, warum das so ist? (auch wenn ich eq~kdpos = posnr schreibe, erhalte ich eine Fehlermeldung, dass posnr nicht bekannt ist...) Warum muss ich links vom Gleichheitszeichen den Tabellenname nicht angeben, aber auf der rechten Seite schon?

Danke!

Viele Grüße!!

Re: Frage zu Programmcode

Beitrag von ralf.wenzel (Top Expert / 3946 / 201 / 281 ) »
ABAPStud hat geschrieben:Danke für deine Antwort. Kannst Du mir vielleicht dann auch noch mitteilen, warum ich bei EQ~kdpos die Tilde benötige? (...) Weißt du, warum das so ist? (auch wenn ich eq~kdpos = posnr schreibe, erhalte ich eine Fehlermeldung, dass posnr nicht bekannt ist...) Warum muss ich links vom Gleichheitszeichen den Tabellenname nicht angeben, aber auf der rechten Seite schon?
Wenn du im Select einen Feldnamen angibst, wird der immer mit Tilde statt Bindestrich geschrieben (außer halt auf der rechten Seite der WHERE-Bedingung). In der Join-Bedingung musst du den Tabellennamen immer angeben, daher der "Tabellenzwang" bei posnr.

Was meinst du mit "Warum muss ich links vom Gleichheitszeichen den Tabellenname nicht angeben"?
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Frage zu Programmcode

Beitrag von ABAPStud (ForumUser / 6 / 0 / 0 ) »
Hi!

Ich meinte, warum bei

Code: Alles auswählen.

... posnr = eq~kdpos
das "eq~" nicht weggelassen werden darf? (Ich denke das ist generell so, aber warum ist das so?

Danke!

Viele Grüße!

Re: Frage zu Programmcode

Beitrag von JHM (Top Expert / 1201 / 1 / 197 ) »
ABAPStud hat geschrieben:denke das ist generell so, aber warum ist das so?
Das hat Ralf doch schon geschrieben:
ralf.wenzel hat geschrieben:
ABAPStud hat geschrieben:In der Join-Bedingung musst du den Tabellennamen immer angeben, daher der "Tabellenzwang" bei posnr.
Gruß Hendrik

Re: Frage zu Programmcode

Beitrag von black_adept (Top Expert / 4117 / 129 / 952 ) »
Hallo AbapStud,

Code: Alles auswählen.

select single mfrpn into lmfrpn 
    from mara as ma inner join vbap as vb on ma~matnr = vb~matnr 
                    inner join eqbs as eq on vb~vbeln = eq~kdauf and 
                                                posnr = eq~kdpos
    where eq~equnr = 5.
die Antwort ist gar nicht so schwer, wenn man bedenkt dass eine Join-Kondition eine ganz normale logische Bedingung mit ein paar Besonderheiten ist.

In einer normalen logischen Bedingung sind üblicherweise ein Vergleichsoperator und einige Konstanten oder Variablen erlaubt. In einer Join-Bedingung sind zusätzlich Tabellenspalten des Joins zugelassen und diese Tabellenspalten werden mit der Notation Tabellenname~Feldname angegeben. Das ist auch nötig, um sie von evtl. namensgleichen programminternen Variablen abzugrenzen.

Zu den Besonderheiten eines Join gehört , dass links des Operators eine Spalte aus dem Join stehen muss. Also bei dir eine Spalte aus den Tabellen MARA, VBAP oder EQBS. Falls der Spaltenname eindeutig ist, darf nun der Tabellenname weglassen werden und die verkürzte Schreibweise ohne Tilde ist erlaubt.

Rechts des Operators hingegen ist ziemlich viel erlaubt. Spaltennamen des Joins, Konstanten, Programmvariablen. Und um eine Spaltennamen von einer namensgleichen Programmvariablen abzugrenzen ist eben die vollständige Schreibweise mit Tilde nötig - die verkürzte Schreibweise kommt hier wohl nicht in Betracht da dann nicht nur gegen die Joinspalten sondern auch gegen alle explizit und implizit existierenden Programmvariablen auf Eindeutigkeit geprüft werden müsste.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Seite 1 von 1

Vergleichbare Themen

4
Antw.
3573
Views
nach Begriffen im Programmcode suchen
von SteveOh » 05.07.2010 09:18 • Verfasst in ABAP® für Anfänger
1
Antw.
2027
Views
Mal ne Frage...
von Gast » 05.12.2005 15:42 • Verfasst in ABAP® für Anfänger
3
Antw.
2590
Views
SAP IS-U: Frage zum CIC
von c-harms » 26.07.2005 11:48 • Verfasst in SAP - Allgemeines
3
Antw.
2343
Views
Frage zu OLE
von Mark33 » 26.09.2013 23:24 • Verfasst in ABAP® für Anfänger
2
Antw.
1834
Views
Frage zu RFC
von Frank Zet. » 12.07.2005 15:46 • Verfasst in ABAP® Core

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Feldwerte vergleichen
vor 10 Stunden von wreichelt 2 / 30
Workflow-Datenfluss mit Multi-Line-Container
vor 12 Stunden von ewx gelöst 2 / 92
Mahnung erstellen
vor 16 Stunden von Sebastian82 4 / 124
Absprung VA02 Position
vor 2 Tagen von gs3rr4 gelöst 3 / 120

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

Feldwerte vergleichen
vor 10 Stunden von wreichelt 2 / 30
Workflow-Datenfluss mit Multi-Line-Container
vor 12 Stunden von ewx gelöst 2 / 92
Mahnung erstellen
vor 16 Stunden von Sebastian82 4 / 124
Absprung VA02 Position
vor 2 Tagen von gs3rr4 gelöst 3 / 120

Unbeantwortete Forenbeiträge

OPD Druck im SPOOL
vor 2 Tagen von Manfred K. 1 / 84
Export von Spools in XLSX
vor einer Woche von abapamateur 1 / 833
Feldberechnung ME32K
vor einer Woche von ZF_SAPler 1 / 1439