Hi,
eine Frage:
Wenn ich in einem Select Statement mit Zusatz "for all entries of itab" eine DB Tabelle abfrage, wird dann das Ergebnis bereits nach dem Primärschlüssel der DB Tabelle sortiert sein, nur weil ich den vollen primär Schlüssel in meiner Where-Klausel angebe? Ich meine nicht.
Beispiel:
die DB Tabelle /BI0/PMATERIAL hat den Primärschlüssel MATERIAL
Code: Alles auswählen.
data: IT_0MATERIAL type sorted table of /BI0/PMATERIAL
with unique key MATERIAL.
Ich will nun in einem Rutsch in diese interne Tabelle alle Einträge schreiben, denen MATERIAL bereits in meiner internen Tabelle DATAPAK vorhanden ist.
Code: Alles auswählen.
select MATERIAL /BIC/BH_MATPRD from /BI0/PMATERIAL
into corresponding fields of table it_0material
for all entries in DATAPAK
where MATERIAL = DATAPAK-MATNR
and OBJVERS = 'A'.
DATAPAK-MATNR war:
Code: Alles auswählen.
'000000000000000004'.
'000000000000000004'.
'000000000000000005'.
'000000000000000003'.
"Zufälliger" Weise hat dieses Statement funktioniert, sprich das Ergebnis von der Datenbank muss sortiert gewesen sein, sodass das Einfügen in die interne Tabelle keine Probleme bereitete.
Aber wenn es kein Zufall war, würde ich gerne die Logik von SAP bzw. der Oracle Datenbank dahinter verstehen. Die "for all entries"- Tabelle ist definitiv nicht sortiert gewesen. Die interne Tabelle hat sogar doppelte Einträge enthalten.
Mein SQL Trace hat leider nicht viel ergeben. Schlussfolgerung: SAP/Oracle sortiert bereite eigenständig die "for all entries" tabelle und eliminiert doppelte Einträge. Da Oracle einen Index für den Primätschlüssel verwendet, hat lediglich die Sortierung der "for all entries" Tabelle und der Index Zugriff dazu geführt, dass das Abfrageergebnis nach dem Primärschlüssel sortiert war.
Da die Interne Tabelle nun über den gleichen unique Key wie die DB Tabelle verfügt, gab es keine Probleme beim Einfügen in diese.
Ist das so richtig?
Gruß, Eddi