DBA Cockpit
Aus SAP-Wiki
Zur Navigation springenZur Suche springen
Siehe Neues ABAP (ab Release 7.40).
Siehe Data Browser SE16, SE16N und SE16H
Siehe Dictionary (Transaktion SE11)
Siehe Kategorie:Neues ABAP.
Mit der Transaktion DBACOCKPIT kann man eine SQL-Abfrage anlegen und dabei mehrere SAP-Tabellen in der Abfrage verknüpfen. Der SQL kann in jedem SAP-System angelegt werden und wird nicht transportiert.
Kritische Würdigung DBA Cockpit
- Vorteile DBA Cockpit
- Die SQL-Abfragen können direkt im Entwicklungssystem/Q-System/Produktivsystem angelegt werden und müssen nicht den normalen Transportweg durchlaufen.
- In der SQL-Abfrage lassen sich mehrere Tabellen verknüpfen und sind somit den Transaktionen SE16 und SE16N überlegen, deren Selektinoen in aller Regel lediglich auf einer SAP-Tabelle beruhen.
- Der SQL-Code im DBA Cockpit ist ähnlich zum SQL-Code, der in CDS-Views verwendet wird. Mit den SQL-Abfragen im DBA Cockpit lernt man schneller CDS-View-Coding.
- Ein Select ist im Vergleich zu einem Query deutlich flexibler. So lassen sich z. B. auch Felder joinen, die keinen identischen Datentyp/Feldlänge haben.
- Im Join lassen sich problemlos (im Gegensatz zum Join im Quickview/Query) Tabellen wieder entfernen
- Das Coding lässt sich sehr leicht und schnell ändern
- Coding lässt sich in Texteditoren, Word, PhraseExpress etc. speichern und sehr schnell wieder einfügen
- Nachteile DBA Cockpit
- Das DBA Cockpit generiert keinen Selektionsbildschirm wie in einem klassischen SAP-Report. Wenn man nach vielen einzelnen Where-Werten selektieren will, ist es mühsam dies manuell zu codieren.
- Die Syntax ist ähnlich, aber doch anders zum klassischen ABAP.
- Das Coding eines SQL-Codings lässt sich zwar im DBA Cockpit abspeichern, aber die Suche nach vorhandenen SQL-Codings ist wenig komfortabel.
- Die Ergebnisliste vom DBA Cockpit ist sehr viel einfacher und weniger komfortabel als eine ALV-Liste eines Reports oder einer generierten ALV-Liste von einem Query/Quickview.
- Kommentare lassen sich nur auf separaten Zeilen einfügen, nicht am Ende einer Codingzeile
Transaktion DBACOCKPIT "SQL Editor"
- In der Transaktion DBACOCKPIT wählt man den Pfad "Diagnostics - SQL Editor" aus.
- Unter "Query Name" vergibt man einen beliebigen Namen. Man braucht keinen Namensraum beachten.
- Im Reiter "Input Query" gibt man den SQL-Code ein.
- Leerzeilen im Coding und Einrückungen (zur Strukturierung des Codings) sind erlaubt.
- Tabellen und Felder werden nicht wie in ABAP mit "-" getrennt, sondern mit "."
SQL Editor - Input Query
Result
Beispiele
EKKO, EKPO und EKES (Bestellungen)
Select ekko.ebeln, ekpo.ebelp, ekpo.matnr, ekes.EINDT from ekko join ekpo on ekpo.ebeln = ekko.ebeln join ekes on ekes.ebeln = ekpo.ebeln and ekes.ebelp = ekpo.ebelp where ekko.ebeln = '4500000031' and ekpo.matnr = '30430_E'
KNVP und KNVV (Kundenstamm Partnerrollen)
select knvp_we.vkorg, knvp_we.vtweg, knvp_we.spart, knvp_we.KUNNR as AG, knvv.loevm, knvp_we.parvw as PARVW, knvp_we.kunn2 as WE, knvp_mf.parvw AS PARVW2, knvp_mf.kunn2 as MF from knvp as knvp_we inner join knvp as knvp_mf ON knvp_mf.kunnr = knvp_we.kunn2 inner join knvv ON knvp_we.kunnr = knvv.kunnr and knvp_we.vkorg = knvv.vkorg and knvp_we.vtweg = knvv.vtweg and knvp_we.spart = knvv.spart where knvp_we.parvw = 'WE' and knvp_we.vkorg = knvp_mf.vkorg order by knvp_we.vkorg, knvp_mf.kunn2
VBAK und VBAP (Kundenauftrag)
Select vbak.vbeln, vbap.posnr from vbak join vbap on vbap.vbeln = vbak.vbeln join ekpo on ekpo.ebeln = ekko.ebeln join ekes on ekes.ebeln = ekpo.ebeln and ekes.ebelp = ekpo.ebelp
VBRK und VBRP (Rechnung)
Select vbrk.vbeln, vbrp.posnr from vbrk join vbrp on vbrp.vbeln = vbrk.vbeln
SQL-Syntax Allgemein
Kommentare
- Mehrzeilige Kommentare /* .. */
/* Dies ist ein Kommentartext. Der kann auch über mehreren Zeilen gehen. */
oder
/* Dies ist ein Kommentartext */
- Kommentare lassen sich nur auf eine komplette Zeile schreiben
- Einzeiliger Kommentar --..
--Einzeiliger Kommentar
- Der einzeilige Kommentar kann leider nicht ans Ende einer Codingzeile angehängt werden
Punkttrenner "tabelle.feld"
- Trenner zwischen Tabelle und Feld "-" wird durch "." ersetzt
Aufzählung Select-Felder mit ","
- Select-Felder werden mit "," aufgeführt
Keine Zielstruktur
- Es braucht beim SQL-Coding im DBA Cockpit keine Zielstruktur-/Tabelle, da das Ergebnis der SQL-Abfrage auch lediglich ausgegeben wird und nicht in einer internen Tabelle weiterverarbeitet wird
Unicode-Zeichen, z. B. "/Z" umschließen
- /..-Felder müssen mit Hochkomma ".." umschlossen werden
- Hat der SAP-Kunde einen eigenen Namensraum, werden einige Tabellen und Felder das "/" haben
Sortierung
- Eine Sortierung nach Feldern wird mit " ORDER BY" vorgenommen
Groß-/Kleinschreibung
- Groß-/Kleinschreibung ist wie bei ABAP nicht relevant
Leerzeilen
- Leerzeilen sind wie bei ABAP erlaubt
Befehlsabschluß ohne Punkt
- Der SQL-Code endet nicht mit einem Punkt
SQL-Syntax Schlüsselworte
AND NOT EXISTS
SELECT mara.matnr FROM mara WHERE mara.attyp = '11' AND NOT EXISTS( SELECT mast.mandt FROM mast WHERE mast.matnr = mara.matnr )
Feld LEFT, COUNT und LIKE
select left(ean11,4), count(*) from mean WHERE EANTP = 'HE' and ( ean11 like '4060%' or ean11 like '4061%' ) group by left(EAN11,4)
Teilfeldzugriff
LEFT
--Die ersten 4 Zeilen vom Feld werden ausgelesen
left(tabelle.feldname,4),
RIGHT
right(lfa1.name1,4) as lfa1_name1,
SUBSTRING
- Beim Substring kann man wie in ABAP "<feld>+4(3)" einen Teil eines Feldes auslesen
Substring(lfa1.name1,4,3) as lfa1_name1,
SELECT TOP 100, LIKE und ORDER BY
select top 100 B.SATNR, B.MATNR, A.COLOR, A."/Z/SD_PRLINE", B.FSH_SEASON_YEAR, B.FSH_SEASON, B.FSH_COLLECTION, B.FSH_THEME, B."/Z/MSTAE", B."/Z/MSTDE" from mara as A inner join fsh_seasons_mat as B on A.matnr = B.matnr where B.satnr like '%1015370' and A.color like '%' order by A.COLOR
(SELECT CASE .. WHEN .. THEN .. ELSE) und SUM
SELECT aupo.abeln, aupo.matnr, case when aupo.matnr not like 'L%' then aupo.pmnge else sum(stpo.menge) end as Menge from aupo left join mast on aupo.matnr = mast.matnr left join stpo on mast.stlnr = stpo.stlnr where aupo.abeln = '0000006542' group by aupo.abeln, aupo.matnr, aupo.pmnge
JOIN 2 Tabellen mit gleichem Namen AS
select knvp_we.vkorg, knvp_we.vtweg, knvp_we.spart, knvp_we.KUNNR as AG, knvv.loevm, knvp_we.parvw as PARVW, knvp_we.kunn2 as WE, knvp_mf.parvw AS PARVW2, knvp_mf.kunn2 as MF from knvp as knvp_we inner join knvp as knvp_mf ON knvp_mf.kunnr = knvp_we.kunn2 inner join knvv ON knvp_we.kunnr = knvv.kunnr and knvp_we.vkorg = knvv.vkorg and knvp_we.vtweg = knvv.vtweg and knvp_we.spart = knvv.spart where knvp_we.kunnr = '0000655174' and knvp_we.parvw = 'WE' and knvp_mf.parvw = 'MF' and knvp_we.vkorg = knvp_mf.vkorg order by knvp_we.vkorg, knvp_mf.kunn2
Andere Schreibweise vom JOIN
Etwas gewöhnungsbedürftig ist den JOIN implizit im Where-Teil des Selects abzubilden.
Aus meiner Sicht ist das schwer zu lesen und nicht empfehlenswert.
select a.MATNR, a.WERKS, a.STAWN as "Comm. Code MARC", c.WSTAW as "Comm. Code MAW1", b.MTART from marc a, mara b, maw1 c where a.MATNR=b.MATNR and b.MATNR=c.MATNR and b.MTART='ZLOT' and a.STAWN != c.WSTAW;