Export velkých tabulek ze SAPu

Tímto příspěvkem bych chtěl volně navázat na předchozí článek o exportu zdrojových kódu ze SAPu. Při exportu velkého objemu dat (typicky se jedná o tabulky BSEG, MSEG, atd.) z transakce SE16 (nebo SE16N) můžete snadno narazit na paměťové limity vašeho systému. Můj program to řeší načtením tabulky pomocí tzv. databázového kuzoru:

OPEN CURSOR WITH HOLD l_db_cursor FOR SELECT * FROM (p_table)
UP TO l_mrows ROWS
BYPASSING BUFFER. 

DB kurzor pracuje zjednodušeně řečeno tak, že ukáže na množinu dat v databázi, kterou chceme načíst, a tu potom vrací v blocích požadované velikosti (konkrétně v mém programu omezených na velikost 1 GB).

FETCH NEXT CURSOR l_db_cursor
INTO CORRESPONDING FIELDS OF TABLE <xtab>
PACKAGE SIZE l_package_size.

Užitečnou volbou může být export pouze vybraných polí (sloupců) tabulky. Toho dosáhnete tak, že si založíte pomocnou Z-strukturu v transakci SE11 (Data Dictionary) jako podmnožinu polí zdrojové databázové tabulky a její název zadáte na výběrové obrazovce programu.

Export velkých tabulek ze SAPu
Výběrová obrazovka (klikněte pro zobrazení v plné velikosti)

Zbývá ještě dodat, že program exportuje výstup ve formě CSV souboru (respektive souborů) až do velikosti 1 GB. Oddělovač sloupců však můžete jednoduše jednoduše zaměnit například za tabulátor:

* CONSTANTS: c_separator TYPE c VALUE ';'.
CONSTANTS: c_separator TYPE c VALUE cl_abap_char_utilities=>horizontal_tab.

Poznámka na závěr: Ve zdrojovém kódu je volán funkční modul Z_CONVERT_TO_TEXT, který slouží k transformaci interní tabulky s danou strukturou do tabulky s řádky typu CHAR. Jedná se o kopii standardního funkčního modulu SAP_CONVERT_TO_TEX_FORMAT, který je jen mírně upraven - přidává datové typy I a s, které původní funkce opomíjí:

CASE l_type.
  WHEN ...
  WHEN 'I' OR 's'.
    l_date_extern = <f_source>.
    ASSIGN l_date_extern TO <f_source>.
  WHEN OTHERS.
ENDCASE.


Související



Podělte se o tento článek s ostatními… Sdílet