Anzahl von Datensätzen aus einer Datenbanktabelle dynamisch lesen

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

Anzahl von Datensätzen aus einer Datenbanktabelle dynamisch lesen

Beitrag von tekko (ForumUser / 60 / 30 / 1 ) »
Hey,
ich habe folgendes Problem:
ich möchte alle Felder aus dem SAP Datenbanktabellen lesen, die den Namensraum "IDX%" und "IDE%" als Feldnamen haben.

Die Abfrage ist somit dynamisch in einem Loop gekapselt.

Code: Alles auswählen.

SELECT d2~tabname, d3~fieldname, d3~rollname, d3~precfield, d2~clidep,d2~contflag FROM dd02l AS d2 JOIN dd03l AS d3 ON d2~tabname = d3~tabname WHERE d2~tabclass = 'TRANSP'
AND d3~tabname = '/IDXGL/TOU_VERS' OR d3~tabname = '/IDXGL/TOU_HEAD' AND d3~rollname LIKE '/IDX%' ORDER BY d2~tabname
INTO TABLE @DATA(test).

LOOP AT test INTO DATA(ls_test) WHERE fieldname <> ''.
  Data(condition) = | { ls_test-fieldname } <> '' |.
  SELECT COUNT(*) FROM (ls_test-tabname) WHERE (condition) INTO @counter.
ENDLOOP.
Ich möchte dabei nur die Tabellen anzeigen lassen, bei denen auch das Feld mit dem Namensraum überhaupt gefüllt ist. Wenn der COUNTER einen Wert hat, dann ist dieses Feld befüllt.

Mein Problem: Bei UUIDs und TIME Datentypen, dumpt das ganze, weil ich nicht auf <> '' prüfen kann.

Wie kann ich das umgehen?

VG
Tekko

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


Re: Anzahl von Datensätzen aus einer Datenbanktabelle dynamisch lesen

Beitrag von black_adept (Top Expert / 4080 / 125 / 934 ) »
Bei einem recht neuen Release könntest du statt "<> ' '" ein "IS NOT INITIAL" probieren

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Icke0801

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Anzahl von Datensätzen aus einer Datenbanktabelle dynamisch lesen

Beitrag von a-dead-trousers (Top Expert / 4394 / 223 / 1182 ) »
Frag in deinem ersten Select zusätzlich noch "INTTYPE" mit ab und passe mit dieser Informationen deine Condition entsprechend an. Bei Zahlenwerten "<> 0" und bei Textwerten "<> ''"

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag (Insgesamt 2):
Icke0801tekko

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: Anzahl von Datensätzen aus einer Datenbanktabelle dynamisch lesen

Beitrag von tekko (ForumUser / 60 / 30 / 1 ) »
a-dead-trousers hat geschrieben:
31.03.2022 21:14
Frag in deinem ersten Select zusätzlich noch "INTTYPE" mit ab und passe mit dieser Informationen deine Condition entsprechend an. Bei Zahlenwerten "<> 0" und bei Textwerten "<> ''"
genialer Tipp. Wusste gar nicht, dass es so ein Feld gibt. Danke dir :)

Re: Anzahl von Datensätzen aus einer Datenbanktabelle dynamisch lesen

Beitrag von ralf.wenzel (Top Expert / 3921 / 200 / 280 ) »

Code: Alles auswählen.

LOOP AT test INTO DATA(ls_test) WHERE fieldname <> ''.
Erstens: Ein LOOP über ein Feldsymbol ist schneller als einer über eine Workarea.

Zweitens: Wenn du vor dem LOOP alle Sätze mit leeren FIELDNAME löschst, brauchst du die WHERE-Bedingung nicht. Ich schätze, das ist schneller - transparenter ist es auf jeden Fall.

Dann bleibt:

Code: Alles auswählen.

SELECT d2~tabname, d3~fieldname, d3~rollname, d3~precfield, d2~clidep,d2~contflag FROM dd02l AS d2 JOIN dd03l AS d3 ON d2~tabname = d3~tabname WHERE d2~tabclass = 'TRANSP'
AND d3~tabname = '/IDXGL/TOU_VERS' OR d3~tabname = '/IDXGL/TOU_HEAD' AND d3~rollname LIKE '/IDX%' ORDER BY d2~tabname
INTO TABLE @DATA(test).

DELETE test WHERE fieldname EQ SPACE.

LOOP AT test ASSIGNING FIELD-SYMBOL(<test>).
  Data(condition) = | { <test>-fieldname } <> '' |.
  SELECT COUNT(*) FROM (<test>-tabname) WHERE (condition) INTO @counter.
ENDLOOP.
Im Zweifel kann man das Ausschließen leerer Feldnamen (wo kommen die eigentlich her?) schon in die WHERE-Bedingung des SELECT aufnehmen.


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

Seite 1 von 1

Vergleichbare Themen

1
Antw.
1541
Views
Anzahl von Datensätzen aus einer Datenbanktabelle dynamisch lesen
von tekko » 31.03.2022 16:26 • Verfasst in ABAP Objects®
5
Antw.
3094
Views
Performance beim Lesen einer Datenbanktabelle
von pohlmann-schwarza » 02.07.2008 12:34 • Verfasst in ABAP® für Anfänger
1
Antw.
2220
Views
Texttabellen lesen dynamisch
von PeterPaletti » 27.04.2017 09:38 • Verfasst in ABAP® für Anfänger
2
Antw.
1560
Views
Dynamisch Tabelleneinträge lesen
von Kenny » 02.05.2013 08:51 • Verfasst in ABAP® für Anfänger
0
Antw.
1154
Views
RTTI Dynamisch die Interne Tabellenstruktur lesen und Dowl.
von Kleenmex » 07.02.2008 15:25 • Verfasst in ABAP® Core

Über diesen Beitrag



Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

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.