Problem bei der Datenbankabfrage

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

Problem bei der Datenbankabfrage

Beitrag von vman (ForumUser / 43 / 2 / 0 ) »
Hallo zusammen,

ich habe ein Problem bei der Bewältigung einer Datenbankabfrage.
Codetechnisch habe ich kein Problem, aber es herrscht eine gewisse Konfusion, wie die Tabellen am besten verknüpft werden sollen.
Es sollen Daten aus den Tabellen VBRK, VBRP, VBAK, VBAP und VBPA sowie KNA1 ausgegeben werden. Im Testsystem mit einigen 1000 Datensätzen funktioniert das problemlos, aber im QSS-System mit einigen Millionen Datensätzen kommt irgendwann die Fehlermeldung, dass der Speicherplatz für eine interne Tabelle nicht ausricht und die Ausführung wird abgebrochen.

Mein Ansatz war der, dass ich aus der VBRK die Daten ausgelesen habe und diese mit der VBPA verknüpfte, bevor ich auf die VBRP zugriff und mit dieser die anderen Tabellen verknüpfte. Die Ergebnisse dieser Verknüpfungen waren sinnvoll und haben zu den Einträgen der jeweiligen Tabellen gepaßt.
Leider führte dieser Ansatz zum Speicherüberlauf im QSS-System.

Mein Vorgesetzter schlug mir vor, erst die VBRK mit der VBRP zu verknüpfen, bevor ich die weiteren Tabellen miteinander verknüpfe. Ich habe das auch umgesetzt, aber jetzt erhalte ich sowohl im Testsystem als auch im QSS-System nur einen einzigen Datensatz als Ergebnis und das macht mich auch etwas stutzig.
Vielleicht könnt ihr mir da weiterhelfen; wäre wirklich super.
Code folgt sogleich.

Code Verknüpfung VBRK mit VBRP etc.:

Code: Alles auswählen.

SELECT LAND1 BZIRK FKDAT PLTYP BSTNK_VF SPART FKART VKORG VBELN FROM VBRK INTO CORRESPONDING FIELDS OF vbrkk.
    it_invoice-prd_level6_code = VBRKK-PLTYP.
    it_invoice-sales_dist_code = VBRKK-BZIRK.
    it_invoice-market_code = VBRKK-LAND1.
    it_invoice-invoice_no1 = VBRKK-VBELN.
    it_invoice-date = VBRKK-FKDAT.
    it_invoice-project = VBRKK-BSTNK_VF.
    CASE vbrkk-vkorg.

      WHEN '0002'.
        CONCATENATE it_invoice-market_code 'EW' INTO it_invoice-market_code.
        it_invoice-prd_resp_unit_code = 'xy'.
        it_invoice-prd_area_code = 'xy'.

      WHEN '0022'.
        CONCATENATE it_invoice-market_code 'FM' INTO it_invoice-market_code.
        it_invoice-prd_resp_unit_code = 'xy'.
        it_invoice-prd_area_code = 'xy'.

    ENDCASE.

    CASE vbrkk-spart.
      WHEN '05'.
        it_invoice-sales_type_code = 'DD'.
      WHEN OTHERS.
        it_invoice-sales_type_code = 'EK'.
    ENDCASE.

    CASE vbrkk-fkart.
      WHEN 'IV'.
        it_invoice-sales_type_code = 'SS'.
      WHEN OTHERS.
        it_invoice-sales_type_code = 'EK'.
    ENDCASE.

  ENDSELECT.

  SELECT KZWI1 KZWI2 KZWI3 KZWI4 KZWI5 KZWI6 SPARA MATKL MATNR ZZAUART ZZMOD AUGRU_AUFT ZZFCD ZZMCD
FKIMG AUBEL FROM VBRP INTO CORRESPONDING FIELDS OF vbrpk WHERE VBELN = VBPAK-VBELN.
    it_invoice-net_bc= vbrpk-KZWI1.
    it_invoice-net_euro = VBRPK-KZWI2.
    it_invoice-net_bc_bu = VBRPK-KZWI3.
    it_invoice-net_lc = VBRPK-KZWI4.
    it_invoice-gross_bc_bu = VBRPK-KZWI5.
    it_invoice-gross_lc = VBRPK-KZWI6.
    it_invoice-prd_level6_code = VBRKK-PLTYP.
    it_invoice-sales_dist_code = VBRKK-BZIRK.

    it_invoice-prd_no = VBRPK-MATNR.
    it_invoice-branch_region_code = VBRPK-SPARA.
    it_invoice-prd_type_code = VBRPK-MATKL.
    it_invoice-prd_fam_code = VBRPK-ZZAUART.
    it_invoice-prd_level4_code = VBRPK-ZZMOD.
    it_invoice-loc_order_type = VBRPK-ZZAUART.
    it_invoice-reason_code = VBRPK-AUGRU_AUFT.
    it_invoice-cust_group = vbpavbk-kunnr.
    it_invoice-esp_prd_no = VBRKK-VBELN.
    it_invoice-prd_level5_code = VBRPK-ZZFCD.


    CASE VBRPK-ZZELEM.
      WHEN 'X'.
        it_invoice-quant_cab = VBRPK-FKIMG.
    ENDCASE.

CONCATENATE it_invoice-prd_level5_code VBRPK-ZZMCD INTO it_invoice-prd_level5_code.

  ENDSELECT.

  SELECT KUNNR VBELN PARVW POSNR FROM VBPA INTO CORRESPONDING FIELDS OF vbpak WHERE VBELN = VBRKK-VBELN.

    it_invoice-cust_no = VBPAK-KUNNR.


    CALL FUNCTION 'SD_VBPA_SINGLE_READ'
    EXPORTING
        I_VBELN                  = VBPAK-VBELN
        I_PARVW                  = VBPAK-PARVW
        I_POSNR                  = VBPAK-POSNR



*       I_BYPASSING_BUFFER       = ' '
*       I_REFRESH_BUFFER         =
*       IMPORTING

*     EXCEPTIONS
*       RECORD_NOT_FOUND         = 1
*       OTHERS                   = 2
.



    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    SELECT SINGLE PSTLZ FROM KNA1 INTO CORRESPONDING FIELDS OF wak WHERE KUNNR = VBPAK-KUNNR.
    it_invoice-zip_code = wak-PSTLZ.


    CONCATENATE VBRKK-LAND1 it_invoice-zip_code INTO it_invoice-zip_code.

    SELECT VBELN MATNR FROM VBAP INTO CORRESPONDING FIELDS OF vbapk WHERE VBELN = VBRPK-AUBEL.
      SELECT VBELN FROM EKKN INTO CORRESPONDING FIELDS OF ekknk WHERE VBELN = VBRPK-AUBEL.
        SELECT EBELN EBELP MATNR FROM EKPO INTO CORRESPONDING FIELDS OF ekpok WHERE EBELN = EKKNK-EBELN AND EBELP = EKKNK-EBELP AND MATNR = VBAPK-MATNR.
          SELECT EBELN LIFNR FROM EKKO INTO CORRESPONDING FIELDS OF ekkok WHERE EBELN = EKPOK-EBELN.
            SELECT LIFNR FROM LFA1 INTO CORRESPONDING FIELDS OF lfa1k WHERE LIFNR = EKKOK-LIFNR.
              it_invoice-prd_budget_group_code = EKKOK-LIFNR+4.
            ENDSELECT.
          ENDSELECT.
        ENDSELECT.
      ENDSELECT.
    ENDSELECT.
  ENDSELECT.
Code Verknüpfung VBRK mit VBPA etc.:

Code: Alles auswählen.

SELECT LAND1 BZIRK FKDAT PLTYP BSTNK_VF SPART FKART VKORG VBELN FROM VBRK INTO CORRESPONDING FIELDS OF vbrkk.
    it_invoice-prd_level6_code = VBRKK-PLTYP.
    it_invoice-sales_dist_code = VBRKK-BZIRK.
    it_invoice-market_code = VBRKK-LAND1.
    it_invoice-invoice_no1 = VBRKK-VBELN.
    it_invoice-date = VBRKK-FKDAT.
    it_invoice-project = VBRKK-BSTNK_VF.
    CASE vbrkk-vkorg.

      WHEN '0002'.
        CONCATENATE it_invoice-market_code 'EW' INTO it_invoice-market_code.
        it_invoice-prd_resp_unit_code = '242'.
        it_invoice-prd_area_code = 'FA'.

      WHEN '0022'.
        CONCATENATE it_invoice-market_code 'FM' INTO it_invoice-market_code.
        it_invoice-prd_resp_unit_code = '241'.
        it_invoice-prd_area_code = 'FB'.



    ENDCASE.

    CASE vbrkk-spart.
      WHEN '05'.
        it_invoice-sales_type_code = 'DD'.
      WHEN OTHERS.
        it_invoice-sales_type_code = 'EK'.
    ENDCASE.

    CASE vbrkk-fkart.
      WHEN 'IV'.
        it_invoice-sales_type_code = 'SS'.
      WHEN OTHERS.
        it_invoice-sales_type_code = 'EK'.
    ENDCASE.


    SELECT KUNNR VBELN PARVW POSNR FROM VBPA INTO CORRESPONDING FIELDS OF vbpak WHERE VBELN = VBRKK-VBELN.

      it_invoice-cust_no = VBPAK-KUNNR.


      CALL FUNCTION 'SD_VBPA_SINGLE_READ'
      EXPORTING
          I_VBELN                  = VBPAK-VBELN
          I_PARVW                  = VBPAK-PARVW
          I_POSNR                  = VBPAK-POSNR



*       I_BYPASSING_BUFFER       = ' '
*       I_REFRESH_BUFFER         =
*       IMPORTING
*         E_VBPAVB                 = VBPAVB "VBPAVB-PERNR "vbpavb
*       E_VBPA                   = vbpavb

*     EXCEPTIONS
*       RECORD_NOT_FOUND         = 1
*       OTHERS                   = 2
  .



      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      SELECT PSTLZ FROM KNA1 INTO CORRESPONDING FIELDS OF wak WHERE KUNNR = VBPAK-KUNNR.
        it_invoice-zip_code = wak-PSTLZ.


        CONCATENATE VBRKK-LAND1 it_invoice-zip_code INTO it_invoice-zip_code.


      ENDSELECT.

      SELECT KZWI1 KZWI2 KZWI3 KZWI4 KZWI5 KZWI6 SPARA MATKL MATNR ZZAUART ZZMOD AUGRU_AUFT ZZFCD ZZMCD
    FKIMG AUBEL FROM VBRP INTO CORRESPONDING FIELDS OF vbrpk WHERE VBELN = VBPAK-VBELN.
        it_invoice-net_bc= vbrpk-KZWI1.
        it_invoice-net_euro = VBRPK-KZWI2.
        it_invoice-net_bc_bu = VBRPK-KZWI3.
        it_invoice-net_lc = VBRPK-KZWI4.
        it_invoice-gross_bc_bu = VBRPK-KZWI5.
        it_invoice-gross_lc = VBRPK-KZWI6.
        it_invoice-prd_level6_code = VBRKK-PLTYP.
        it_invoice-sales_dist_code = VBRKK-BZIRK.
        it_invoice-prd_no = VBRPK-MATNR.
        it_invoice-branch_region_code = VBRPK-SPARA.
        it_invoice-prd_type_code = VBRPK-MATKL.
        it_invoice-prd_fam_code = VBRPK-ZZAUART.
        it_invoice-prd_level4_code = VBRPK-ZZMOD.
        it_invoice-loc_order_type = VBRPK-ZZAUART.
        it_invoice-reason_code = VBRPK-AUGRU_AUFT.
        it_invoice-cust_group = vbpavbk-kunnr.
        it_invoice-esp_prd_no = VBRKK-VBELN.
        it_invoice-prd_level5_code = VBRPK-ZZFCD.

        CASE VBRPK-ZZELEM.
          WHEN 'X'.
            it_invoice-quant_cab = VBRPK-FKIMG.
        ENDCASE.

 CONCATENATE it_invoice-prd_level5_code VBRPK-ZZMCD INTO it_invoice-prd_level5_code.

      ENDSELECT.

      SELECT VBELN MATNR FROM VBAP INTO CORRESPONDING FIELDS OF vbapk WHERE VBELN = VBRPK-AUBEL.
        SELECT VBELN FROM EKKN INTO CORRESPONDING FIELDS OF ekknk WHERE VBELN = VBRPK-AUBEL.
          SELECT EBELN EBELP MATNR FROM EKPO INTO CORRESPONDING FIELDS OF ekpok WHERE EBELN = EKKNK-EBELN AND EBELP = EKKNK-EBELP AND MATNR = VBAPK-MATNR.
            SELECT EBELN LIFNR FROM EKKO INTO CORRESPONDING FIELDS OF ekkok WHERE EBELN = EKPOK-EBELN.
              SELECT LIFNR FROM LFA1 INTO CORRESPONDING FIELDS OF lfa1k WHERE LIFNR = EKKOK-LIFNR.
                it_invoice-prd_budget_group_code = EKKOK-LIFNR+4.
              ENDSELECT.
            ENDSELECT.
          ENDSELECT.
        ENDSELECT.
      ENDSELECT.
    ENDSELECT.
Ich bin für jede Hilfe dankbar, da ich im Moment etwas auf dem Schlauch stehe und die Umsetzung der Vorschläge meiner Kollegen auch nicht zu den gewünschten Ergebnissen führte.
Wäre evtl. eine Verknüpfung der Tabelle VBPA mit den Tabellen VBUK und VBUP eine Alternative, um an die Vertriebsdaten zu kommen?
Ich danke für eure Antworten.

Bye,

Alex.


Problem bei der Datenbankabfrage

Beitrag von wreichelt (Expert / 865 / 23 / 147 ) »
Hallo Alex,
schaue dir bitte mal den OSS-Hinweis 185530 an. Hier werden
einige Hinweise zur Performance im SD-Bereich gegeben.
Ich habe die Infos schon verwendet und dadurch die Systembelastung
deutlich senken können.
Gruß Wolfgang

Beitrag von Christl (ForumUser / 15 / 0 / 0 ) »
Hallo Alex,

Wenn Du Werte mit dem Inhalt der internen Tabellen vergleichst fehlt meiner Meinung nach LOOP. Das könnte der Grund dafür sein, dass du nur einen Datensatz zurückbekommst.

Grüsse,
Christl

Beitrag von Krueger ( / / 0 / 3 ) »
Christl hat geschrieben:Hallo Alex,

Wenn Du Werte mit dem Inhalt der internen Tabellen vergleichst fehlt meiner Meinung nach LOOP. Das könnte der Grund dafür sein, dass du nur einen Datensatz zurückbekommst.

Grüsse,
Christl
....nicht nur das.... für einen LOOP fehlt noch das

INTO CORRESPONDING FIELDS OF TABLE vbrkk.




@alex: Schon mal an eine "logische Datenbank" gedacht???

Beitrag von vman (ForumUser / 43 / 2 / 0 ) »
Hallo zusammen,

vielen Dank für eure zahlreichen Antworten.
Die Lösung für das Problem mit der Ausgabe eines einzelnen Datensatzes habe ich gefunden; das zumindest lag nicht an einer fehlenden LOOP-Schleife.
Ich werde diese Möglichkeit aber umzusetzen versuchen.

An eine logische Datenbank habe ich bisher noch nicht gedacht; ich programmiere noch nicht solange in ABAP bzw. Datenbanken, aber auch da werde ich mich schlau machen und es versuchen.

Ich habe mich bereits registriert bei sdn.sap.com, aber keinen OSS-Hinweis 185530 gefunden; in der Suche war kein nennenswerter Verweis zu finden.
Wo im OSS sind allgemein solche Hinweise zu finden?

Danke und Gruß,

Alex.

Problem mit der Datenbankabfrage

Beitrag von wreichelt (Expert / 865 / 23 / 147 ) »
Hallo,
OSS-Hinweise findest du unter service.sap.com
Allerdings ist dort ein OSS-User notwendig.
Gruß Wolfgang

Re: Problem mit der Datenbankabfrage

Beitrag von vman (ForumUser / 43 / 2 / 0 ) »
wreichelt hat geschrieben:Hallo,
OSS-Hinweise findest du unter service.sap.com
Allerdings ist dort ein OSS-User notwendig.
Gruß Wolfgang
Alles klar, vielen Dank. Ich habe einen solchen Zugang; El Jefe hat ihn für mich eingerichtet.
Ich habe auch weitere Anhaltspunkte des Problems gefunden:
es wird eine Fehlermeldung ausgegeben, die ungefähr so lautet, dass im Join ein Quote gefunden wird, für welches kein Matching Quote existiert.
Jetzt muß ich das nur noch finden.
Zum besseren Verständnis des Programms/Quellcodes sei noch angemerkt, dass eine Textdatei aus den extrahierten Werten erzeugt werden soll. Die Erstellung der Textdatei erfolgt in einem Unterprogramm, in welchem über die Abfragen geloopt wird.
Leider habe ich den vollständigen Quellcode derzeit nicht zur Hand, da ich im Urlaub bin und testen kann ich derzeit auch nichts.
Ich bin aber für jeden weiteren Hinweis dankbar.

Viele Grüße,

Alex.

Beitrag von vman (ForumUser / 43 / 2 / 0 ) »
Hallo,

mit der Antwort hat es jetzt länger gedauert, aber dafür kann ich jetzt auch sagen, woran es lag. Es waren schlicht zuviele Datensätze; das Programm insgesamt hat durchaus funktioniert, aber der Arbeitsspeicher ist in die Knie gegangen und alle Optimierungsversuche haben an dieser Tatsache nichts geändert.
Eine Frage habe ich aber noch: ich kann mich unter service.sap.com anmelden, aber finde die OSS-Hinweise nicht. Ein kleiner Tip, der mir das Licht zeigt, wäre sehr hilfreich. :)

Danke und Gruß,

Alex.

Beitrag von brinam (Specialist / 111 / 0 / 0 ) »
Hallo,

links oben bei "SAP Support Portal" klicken, dann musst Du Deine Kennung eingeben und auf dem Folgebild den Kartenreiter "Hilfe&Supprt" anwählen.
Viele Grüße
Britta

Beitrag von vman (ForumUser / 43 / 2 / 0 ) »
Super; vielen Dank.

Seite 1 von 1

Über diesen Beitrag


ABAP & SAP eBook Flatrate von Espresso Tutorials Sponsorlink
Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Vergleichbare Themen

Datenbankabfrage
von SLUK » 19.02.2018 18:48
Datenbankabfrage mit inner join
von egge » 05.02.2008 12:12
Datenbankabfrage vor einer Reservierung
von SYsa » 04.07.2017 12:46
Datenbankabfrage einschränken erzet = 8 bis 18 Uhr
von thomasxy » 04.01.2008 10:36
Brauche Hilfe für Datenbankabfrage mit InnerJoin
von thomasxy » 01.02.2008 08:09