Code: Alles auswählen.
REPORT zforum64 .
DATA wa(100).
DATA: BEGIN OF itab OCCURS 0,
tabname TYPE dd03l-tabname,
fieldname TYPE dd03l-fieldname,
END OF itab.
DATA : BEGIN OF wtab OCCURS 0,
name(50),
END OF wtab.
SELECT-OPTIONS tabn FOR itab-tabname.
PARAMETERS field LIKE dd03l-fieldname DEFAULT 'XUBNAME'.
PARAMETERS val(50) DEFAULT sy-uname.
SELECT tabname fieldname FROM dd03m INTO TABLE itab
WHERE tabname IN tabn
AND rollname = field
AND DDLANGUAGE = sy-langu.
CONCATENATE text-001 val text-001 INTO val.
CONCATENATE field '=' val '.' INTO wtab-name SEPARATED BY space.
sort itab.
LOOP AT itab.
SELECT COUNT( * ) FROM dd02l INTO sy-dbcnt
WHERE tabname = itab-tabname
AND tabclass = 'TRANSP'.
CHECK sy-dbcnt > 0.
SELECT COUNT( * ) FROM (itab-tabname) INTO sy-dbcnt
WHERE (wtab).
IF sy-dbcnt > 0.
WRITE: / itab-tabname.
ENDIF.
ENDLOOP.Code: Alles auswählen.
EPORT z_scan_table .
DATA: BEGIN OF itab OCCURS 0,
tabname TYPE dd02l-tabname,
fieldname TYPE dd03l-fieldname,
anz TYPE i,
END OF itab.
DATA: BEGIN OF itab_verz OCCURS 0,
tabname TYPE dd02l-tabname,
END OF itab_verz.
SELECT-OPTIONS s_tabn FOR itab-tabname.
PARAMETERS p_val(50) OBLIGATORY.
START-OF-SELECTION.
SELECT tabname FROM dd02l INTO TABLE itab_verz WHERE tabname IN s_tabn.
LOOP AT itab_verz.
PERFORM scan_table.
ENDLOOP.
*&------------------------------------------------
*& Form scan_table
*&------------------------------------------------
FORM scan_table.
DATA: mytable TYPE REF TO data.
CREATE DATA: mytable TYPE TABLE OF (itab_verz-tabname).
FIELD-SYMBOLS: <fs_tab> TYPE ANY TABLE.
ASSIGN: mytable->* TO <fs_tab>.
SELECT * FROM (itab_verz-tabname) INTO TABLE <fs_tab>.
FIELD-SYMBOLS: <fs_wa> TYPE ANY.
DATA: mywa TYPE REF TO data.
CREATE DATA: mywa type line of (itab_verz-tabname).
* ASSIGN mywa->* TO <fs_wa>.
LOOP AT <fs_tab> INTO mywa.
ENDLOOP.
Code: Alles auswählen.
DATA:
BEGIN OF tab OCCURS 0,
wa(2000),
END OF tab.
SELECT * FROM (dbtab) INTO TABLE tab.Code: Alles auswählen.
REPORT z_scan_table .
DATA: BEGIN OF itab OCCURS 0,
tabname TYPE dd02l-tabname,
fieldname TYPE dd03l-fieldname,
anz TYPE i,
END OF itab.
DATA: BEGIN OF itab_verz OCCURS 0,
tabname TYPE dd02l-tabname,
END OF itab_verz.
**********************************************
SELECT-OPTIONS: s_tabn FOR itab-tabname.
PARAMETERS: p_val(50) TYPE c.
***********************************************
START-OF-SELECTION.
DESCRIBE FIELD p_val LENGTH gv_len IN CHARACTER MODE.
SELECT tabname FROM dd02l INTO TABLE itab_verz WHERE tabname IN s_tabn
and tabclass = 'TRANSP'.
LOOP AT itab_verz.
PERFORM scan_table.
ENDLOOP.
*&---------------------------------------------*& Form scan_table
*&---------------------------------------------
FORM scan_table.
TYPE-POOLS: slis.
DATA: ct_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = itab_verz-tabname
CHANGING
ct_fieldcat = ct_fieldcat[].
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
itab-tabname = itab_verz-tabname.
LOOP AT ct_fieldcat.
DATA: lv_cond TYPE string.
CLEAR lv_cond.
CONCATENATE ct_fieldcat-fieldname
'='
''''
INTO lv_cond
SEPARATED BY space.
CONCATENATE lv_cond
p_val
''''
INTO lv_cond.
SELECT COUNT( * ) FROM (itab_verz-tabname) INTO itab-anz
WHERE (lv_cond).
IF sy-subrc = 0.
itab-fieldname = ct_fieldcat-fieldname.
APPEND itab.
WRITE: / itab-tabname, itab-fieldname, itab-anz.
ENDIF.
ENDLOOP.
ENDFORM. "scan_tableCode: Alles auswählen.
SELECT COUNT( * ) FROM (itab_verz-tabname) INTO itab-anz WHERE (lv_cond).
Code: Alles auswählen.
PARAMETERS : wert(10) DEFAULT 111.
*
DATA zwert(10) TYPE i.
CATCH SYSTEM-EXCEPTIONS convt_no_number = 1.
PACK wert TO zwert.
ENDCATCH.
WRITE: / 'Eingabe:', wert.
ULINE.
IF sy-subrc = 1.
WRITE: / 'falsch', wert under wert.
ELSE.
WRITE : / 'richtig', zwert.
ENDIF.Weiß jemand, ob das irgendwo dokumentiert ist?Jüüürgen hat geschrieben:Hallo,
in der Where Bedinung steht z.B.Code: Alles auswählen.
SELECT COUNT( * ) FROM (itab_verz-tabname) INTO itab-anz WHERE (lv_cond).
FELDX = 'TEST'.
Wenn nun das Feld in der Tabelle nur 1 Stellig ist, dann wird nur auf "T" vergliechen. Wie kann ich es verhindern, daß die Tabellenzeile nicht gefunden wird, wenn das Suchargument länger als das Feld in der Tabelle ist.
Wenn man nach Texten sucht, nimmt man in die WHERE-Klausel am besten gleich nur die Felder mit passendem Typ auf.Bei numerischen Feldern schmiert mir der ABAP ab mit CONVT_NO_NUMBER.