DBA Cockpit

Aus SAP-Wiki
Wechseln zu:Navigation, Suche

Siehe Neues ABAP (ab Release 7.40).

Mit der Transaktion DBACOCKPIT kann man eine SQL-Abfrage anlegen. Der SQL kann in jedem SAP-System angelegt werden und wird nicht transportiert.

Vor- und Nachteile 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.
  • Der SQL-Code im DBA Cockpit ist ähnlich zum SQL-Code, der in CDS-Views verwendet wird. Mit den SQL-Abfragen imv 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 PhraseExpress 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 (zur Strukturierung des Codings) sind erlaubt.

SQL Editor - Input Query

DBACOCKPIT2.JPG

Result

DBACOCKPIT3.JPG

SQL

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 einzige 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-Abfragen

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),

Teilfeldzugriff RIGHT

right(lfa1.name1,4) as lfa1_name1,

Teilfeldzugriff SUBSTRING

  • Beim Substring kann man wie in ABAP "<feld>+4(3)" einen Teil eines Feldes auslesen
Substring(lfa1.name1,4,3) as lfa1_name1,

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;

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

Web-Links