Frage zu Subquery

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

Frage zu Subquery

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
Hallo zusammen,

ich würde gerne in einem Query zusätzlich überprüfen, ob die Tabellen der Tabelle dd02l befüllt sind oder nicht.

Code: Alles auswählen.

    select dd02l~tabname from dd02l
    into table t_itab
    where ( dd02l~contflag = 'C' or
            dd02l~contflag = 'G' ) and
            dd02l~tabclass = 'TRANSP' and
             EXISTS ( select  *
                   FROM (dd02l~tabname)
                    ).
Fehlermeldung:
Class "DEMO" does not contain an interface "DD02L".

Vielen Dank.

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


Re: Frage zu Subquery

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Öhm - warum willst du das prüfen? Und bei einem Fehler in der Klassenschnittstelle müsstest du die schon mitposten, sonst kann man hier gar nix sagen.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Frage zu Subquery

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
Öhm - warum willst du das prüfen?
Dient zur Vereinfachung meines Debuggings und ich wollte mal Subqueries ausprobieren.

Ich habe bisher keine Interfaces in meiner Klassendefinition definiert. dd02l ist ja auch kein Interface.

Re: Frage zu Subquery

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Moin,

mach mal das "dd02l~" überall weg und im Subquery das "~tabname". Dann stimmt das Ding wenigstens syntaktisch und lesbar isses auch noch.
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Frage zu Subquery

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
ralf.wenzel hat geschrieben:Moin,

mach mal das "dd02l~" überall weg und im Subquery das "~tabname". Dann stimmt das Ding wenigstens syntaktisch und lesbar isses auch noch.
Ok, hier liegt dann wohl mein Denkfehler: Ich will schon auf den jeweiligen Wert des Feldes dd02l~tabname das Query anwenden.

Wenn also z.B die der Wert 'TVAKT' in dem Feld tabname steht, so der Subquery den Select auf TVAKT durchführen.

Vielleicht geht das mit der Table-Fetch (into table) Variante nicht und ich muss die Select Endselect Variante anwenden???

Re: Frage zu Subquery

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
Jetzt kapiere ich erst, was du überhaupt willst. Eigentlich liefert sy-dbcnt die Zahl der gefundenen Einträge. Aber so richtig schlüssig ist dein Vorgehen nicht. Du fragst: "Sag mir den Tabellennamen, wo der es einen Satz zum Tabellennamen gibt". Das ist nicht nur nicht notwendig, sondern gar ein Performancefresser. Warum nicht einfach:

Code: Alles auswählen.

    SELECT tabname FROM dd02l
    INTO TABLE t_itab
    WHERE contflag IN ('C','G') OR
            AND tabclass = 'TRANSP'.
Wenn du wissen willst, ob der SELECT erfolgreich war, guckst du sy-dbcnt oder sy-subrc.

Oder hab ich das immer noch nicht verstanden?
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Frage zu Subquery

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
Ne, du hast mich noch nicht ganz verstanden.

" Gib mir alle Tabellen aus DD02l, welche contflag IN ('C','G') AND tabclass = 'TRANSP' und (jetzt kommt das EXISTS ) welche Tabelle (DD02l~tabname) nicht leer ist.

Sprich der sy-subrc der Subquery (damit meine ich den Teil nach EXISTS) soll <> 4 sein.

Macht das gar keinen Sinn?

EXISTS (subquery) gibt ja true zurück, wenn die lines des Selects >= 1 sind.

Re: Frage zu Subquery

Beitrag von ralf.wenzel (Top Expert / 3924 / 200 / 280 ) »
AH, ok! Du musst dann aber zur Laufzeit des "unteren" Querys den Namen der Tabelle kennen, darum würde ich das wie folgt machen:

Code: Alles auswählen.

data: gt_tabname type standard table of tabname.
field-symbols: <tabname> type tabname.

select tabname from dd02l into table gt_tabname
where contflag in ('C','G')
and   tabclass = 'TRANSP'.

loop at gt_tabname assigning <tabname>.
  select count(*) from (<tabname>).
  check sy-subrc eq 0.
  clear <tabname>.
endloop.
Es verbleiben in gt_tabname die Namen der Tabellen, die nicht leer sind. Man mag sich drüber streiten, ob ein select single statt eines select count(*) schneller ist.

Ralf

Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
Spookykid

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

Re: Frage zu Subquery

Beitrag von Spookykid (Specialist / 140 / 28 / 0 ) »
danke ralf. Ich dachte, man könnte das eventuell in eine eine "eine" Abfrage packen. In 2 Schritten ist es natürlich auch ok.

Re: Frage zu Subquery

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Hi! Hier mein Senf!
Spookykid hat geschrieben:Ich dachte, man könnte das eventuell in eine eine "eine" Abfrage packen. In 2 Schritten ist es natürlich auch ok.
Ne, das geht leider allgemein nicht in SQL-Syntax. In einer Query kann nicht ein Wert ermittelt werden um dann als Tabellenname für eine weitere Abfrage zu dienen. Vereinfacht gesagt: In SQL wird zwischen NAME und WERT unterschieden.
ralf.wenzel hat geschrieben:Man mag sich drüber streiten, ob ein select single statt eines select count(*) schneller ist.
Ich würd eher auf den SELECT SINGLE tippen, da dann wirklich nur ein Datensatz selektiert wird und die Datenbank nicht "mühselig" (je nach größe und DB-Optimizer) alle einträge zählen muss. Irgendwo hab ich mal gehört, dass es mit UP TO x ROWS sogar noch schneller geht als mit SELECT SINGLE.

Das einzige Problem ist dann halt, dass man zuerst eine Workarea anlegen muss um mit SELECT SINGLE die Abfrage auszuführen. Bei UP TO x ROWS ist sogar eine interne Tabelle notwendig.

lg
ADT
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

Seite 1 von 1

Vergleichbare Themen

3
Antw.
2463
Views
Subquery mit Name?
von Bajdu » 14.08.2006 09:54 • Verfasst in ABAP® für Anfänger
13
Antw.
4251
Views
Subquery gesucht
von Thomas R. » 10.12.2015 09:49 • Verfasst in ABAP® Core
1
Antw.
589
Views
Datenbank Delete mit Subquery
von JohnLocklay » 28.05.2019 14:47 • Verfasst in ABAP® Core
2
Antw.
1279
Views
Subquery in dynamischer Where-Bedingung
von Stefan7777 » 22.11.2005 10:36 • Verfasst in ABAP® Core
2
Antw.
684
Views
Subquery über Tabelle JEST
von havanna » 02.10.2020 08:58 • Verfasst in ABAP® für Anfänger

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.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
Gestern von Bright4.5 1 / 511
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2146
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8742