Code: Alles auswählen.
*&---------------------------------------------------------------------*
*& Program Z_DYNAMIC_SQL2
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
PROGRAM Z_DYNAMIC_SQL2.
TYPE-POOLS abap.
PARAMETERS: lt RADIOBUTTON GROUP 1 DEFAULT 'X',
gt RADIOBUTTON GROUP 1,
value TYPE i.
DATA: BEGIN OF wa,
count TYPE i,
INCLUDE TYPE spfli,
END OF wa.
DATA: checked TYPE abap_bool,
name TYPE fieldname,
lines TYPE i,
descr_ref TYPE REF TO cl_abap_structdescr,
sel_list TYPE TABLE OF edpline,
group_list TYPE TABLE OF edpline,
having TYPE string.
FIELD-SYMBOLS: <fs> TYPE ANY,
<comp_wa> TYPE abap_compdescr.
START-OF-SELECTION.
SET PF-STATUS 'MAIN'.
* get all components of table 'SPFLI'
descr_ref ?= cl_abap_typedescr=>describe_by_name( 'SPFLI' ).
LOOP AT descr_ref->components ASSIGNING <comp_wa>.
name = <comp_wa>-name.
WRITE: / checked AS CHECKBOX, name.
ENDLOOP.
lines = LINES( descr_ref->components ).
AT USER-COMMAND.
* determine selected columns
CLEAR: sel_list, group_list.
APPEND 'count(*) AS count' TO sel_list.
DO lines TIMES.
READ LINE sy-index FIELD VALUE checked.
IF checked = 'X'.
READ LINE sy-index FIELD VALUE name.
APPEND name TO: sel_list, group_list.
ENDIF.
ENDDO.
* determine operator
IF gt = 'X'.
having = 'count(*) > value'.
ELSE.
having = 'count(*) < value'.
ENDIF.
SELECT (sel_list)
FROM spfli UP TO 20 ROWS
INTO CORRESPONDING FIELDS OF wa
GROUP BY (group_list)
HAVING (having).
* write all components to list
WRITE / wa-count.
LOOP AT group_list INTO name.
ASSIGN COMPONENT name OF STRUCTURE wa TO <fs>.
WRITE <fs>.
ENDLOOP.
ENDSELECT.
Code: Alles auswählen.
* write all components to list
WRITE / wa-count.
LOOP AT group_list INTO name.
ASSIGN COMPONENT name OF STRUCTURE wa TO <fs>.
****************************************
WRITE <fs>. " Fehler hier
****************************************
ENDLOOP.
ENDSELECT.
Code: Alles auswählen.
Fehleranalyse
Es wurde auf ein noch nicht zugewiesenes Feldsymbol zugegriffen
(Datensegment Nr. 10).
Dieser Fehler tritt auf, wenn
- ein typisiertes Feldsymbol angesprochen wird, bevor es mittels
ASSIGN gesetzt wird, oder
- ein Feldsymbol angesprochen wird, das auf die Zeile einer
internen Tabelle gezeigt hat, die gelöscht wurde, oder
- ein Feldsymbol angesprochen wird, das vorher mit UNASSIGN
zurückgesetzt wurde oder das auf ein lokales Feld gezeigt hat,
das nicht mehr existiert oder
- ein Parameter einer globalen Funktionsschnittstelle angesprochen
wird, obwohl der entsprechende Funktionsbaustein nicht aktiv ist,
d.h. nicht in der Liste der aktiven Aufrufe steht. Die Liste der
aktiven Aufrufe kann diesem Kurzdump entnommen werden.
Code: Alles auswählen.
DATA: BEGIN OF wa,
count TYPE i.
INCLUDE STRUCTURE spfli.
DATA END OF wa.
Code: Alles auswählen.
WA-DISTANCE
Code: Alles auswählen.
WA-INCLUDE-DISTANCE
Code: Alles auswählen.
WRITE / wa-count.
LOOP AT group_list INTO name.
ASSIGN COMPONENT name OF STRUCTURE wa TO <fs>.
WRITE <fs>.
ENDLOOP.
Code: Alles auswählen.
WRITE / wa-count.
LOOP AT group_list INTO name.
************************************************************
ASSIGN COMPONENT name OF STRUCTURE wa-include TO <fs>.
************************************************************
WRITE <fs>.
ENDLOOP.