* Programmname
DATA: lv_prg_name TYPE sy-repid VALUE 'ZREPORT1'.
* Compilerausgaben
DATA: lv_msg TYPE string.
DATA: lv_line TYPE string.
DATA: lv_word TYPE string.
DATA: lv_off TYPE string.
* iTab mit Quellcode
DATA: it_src TYPE STANDARD TABLE OF char1024.
* Codezeilen zu iTab hinzufügen
APPEND |REPORT { lv_prg_name }.| TO it_src.
APPEND |WRITE: / 'Hallo Welt!'.| TO it_src.
* ausführbares Programm (TYPE '1') anlegen, es wird persistent auf der Datenbank gespeichert,
* aber keinem Paket zugeordnet und ist global verfügbar
INSERT REPORT lv_prg_name FROM it_src PROGRAM TYPE '1' UNICODE ENABLING 'X'.
* Programmcode compilieren, existierender Programmcode wird überschrieben
GENERATE REPORT lv_prg_name MESSAGE lv_msg LINE lv_line WORD lv_word OFFSET lv_off.
IF sy-subrc = 0.
* wenn Compilierung ok: Code ausführen
SUBMIT (lv_prg_name) AND RETURN.
ELSE.
* Im Fehlerfall: Fehlerausgabe
WRITE: / 'Error during generation in line: ', lv_line.
IF lines( it_src ) > 0.
WRITE: it_src[ lv_line ].
ENDIF.
WRITE: / lv_msg.
WRITE: / 'Word: ', lv_word.
WRITE: / 'Offset: ', lv_off.
ENDIF.
* aktives Programm wieder aus der DB löschen
DELETE REPORT lv_prg_name.
CASE sy-subrc.
WHEN 0.
WRITE: / |{ lv_prg_name } gelöscht.|.
WHEN 4.
WRITE: / |{ lv_prg_name } nicht vorhanden.|.
WHEN OTHERS.
WRITE: / |Anderer Fehler.|.
ENDCASE.
Weiterführende Infos: Link