Füllung zusätzliche Spalten einer internen Tabelle mit zusätzlichen Daten durch SELECT-Anweisung? Kann das getan werden?
SELECT matnr ersda ernam laeda
FROM mara
INTO CORRESPONDING FIELDS OF TABLE gt_mara
UP TO 100 ROWS.
In diesem Punkt habe ich 100 Einträge in der itab gt_mara
.
SELECT aenam vpsta pstat lvorm mtart
FROM mara
INTO CORRESPONDING FIELDS OF TABLE gt_mara
FOR ALL ENTRIES IN gt_mara
WHERE matnr = gt_mara-matnr AND
ersda = gt_mara-ersda AND
ernam = gt_mara-ernam AND
laeda = gt_mara-laeda.
In diesem Punkt habe ich 59 Einträge. Was Sinn macht. Dieser code fehlerhaft ist, denn es könnte sein, ändern Sie die Selektionskriterien, die zur Laufzeit.
Sowieso, was ich beabsichtigte, war dies: wählen Sie die ersten 4 Felder der Tabelle an einer Stelle, und wählen Sie dann die anderen 5 bei einigen anderen.
Natürlich, dies ist nur ein Beispiel. Vielleicht das zweite wählen würde getan werden, auf einer anderen Tabelle mit dem gleichen Schlüssel oder mit einer unterschiedlichen Anzahl von Feldern.
So kann dies noch getan werden?
Gibt es weitere effiziente Methoden, um dies zu erreichen, als das, was mir in den Sinn kommt standardmäßig (nochmal das komplette select) ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Entweder
SELECT
alles, was Sie brauchen, sofort (das ist die bevorzugte Lösung, wenn die Daten stammen aus der gleichen Tabelle) oderSELECT
die zusätzlichen Sachen später (das ist eine gute Idee, wenn das Zeug kommt aus einer anderen Tabelle, die nicht für die erste Selektion). Für die Montage der Ergebnismenge, die Datenbank muss in der Regel Zugriff auf den gesamten Datenbestand sowieso, so dass es nicht wirklich weh, wählen Sie einige zusätzliche Felder - im Gegensatz zu schlagen Sie die Datenbank erneut mit einem massivenSELECT
- Anweisung (wenn dieFOR ALL ENTRIES
Tisch bekommt große). Auch Bedenken, dass - je nach Art der Verarbeitung Sie tun - die Inhalte der Tabelle könnten sich geändert haben in der Zwischenzeit. Wenn die Datenbank-Transaktion (LUW) endet (das ist immer der Fall zwischen dialog-Schritte), verlieren Sie die Datenbank-level-Transaktion isolation.Ok, ich denke, die Essenz der Frage ist mehr, ob Sie aktualisieren können bestimmte ungefüllte Felder in einer internen Tabelle direkt durch eine zweite select-Anweisung.
Die Antwort ist Nein. Ihre zweite select-Anweisung ersetzen Sie den Inhalt in der Tabelle
gt_mara
, so würden Sie mit der linken, eine interne Tabelle, in der die ersten 4 Felder sind leer, und die letzten 5 sind gefüllt.Die beste Sie tun könnten, ist so etwas wie dieses:
Dies ist natürlich ziemlich ineffizient, das ist, warum Sie immer versuchen, die Datenbank zu tun, wie viel der Arbeit für Sie zu bringen, bevor Sie die Daten zurück an den application server. Natürlich, wenn die Daten aus der gleichen Tabelle wählen Sie es alle in einem Rutsch wird die beste option sein. In den meisten Fällen, auch wenn die Daten in verschiedenen Tabellen, die Sie nicht besser wäre, die Erstellung einer Ansicht oder mit einem join.
In seltenen Fällen ist es notwendig, um eine Schleife auf Ihre interne Tabelle zu füllen Sie einige Felder, die nicht verfügbar waren, um Sie, wenn Sie haben das original wählen.