Skip to content

Instantly share code, notes, and snippets.

@alezhu
Created November 25, 2024 08:10
Show Gist options
  • Save alezhu/6400f82327d50d6b285ef34b784ed2a2 to your computer and use it in GitHub Desktop.
Save alezhu/6400f82327d50d6b285ef34b784ed2a2 to your computer and use it in GitHub Desktop.
SAP ABAP Test select from internal table with/without primary key
REPORT ztest_select_itab_key.
TYPES:
BEGIN OF ts_key,
otype TYPE wbcrossgt-otype,
name TYPE wbcrossgt-name,
include TYPE wbcrossgt-include,
END OF ts_key.
DATA gt_data TYPE STANDARD TABLE OF wbcrossgt WITH EMPTY KEY.
DATA gt_key_std TYPE STANDARD TABLE OF ts_key WITH EMPTY KEY.
DATA gt_key_srt TYPE SORTED TABLE OF ts_key WITH UNIQUE KEY otype name include.
DATA: BEGIN OF gs_result,
pass TYPE char30,
std TYPE i,
sort TYPE i,
sort_idx TYPE i,
END OF gs_result.
DATA gt_result LIKE STANDARD TABLE OF gs_result WITH EMPTY KEY.
PARAMETERS p_count TYPE i DEFAULT 10.
START-OF-SELECTION.
SELECT
*
FROM wbcrossgt
WHERE name = 'SY'
INTO CORRESPONDING FIELDS OF TABLE @gt_key_srt.
gt_key_std[] = gt_key_srt[].
DATA(gv_count) = lines( gt_key_srt ).
WRITE: 'Keys count: ', gv_count. NEW-LINE.
DATA(go_rand) = cl_abap_random_int=>create(
min = 1
max = 2
).
DO p_count TIMES.
CLEAR gs_result.
CLEAR gt_data.
gs_result-pass = |Pass { sy-index WIDTH = 1 }|.
gs_result-sort_idx = go_rand->get_next( ).
DO 2 TIMES.
GET RUN TIME FIELD DATA(gv_start).
CASE sy-index.
WHEN gs_result-sort_idx.
ASSIGN gs_result-sort TO FIELD-SYMBOL(<gv_diff>).
SELECT
*
FROM @gt_key_srt AS key
INNER JOIN wbcrossgt AS d
ON d~otype = key~otype
AND d~name = key~name
AND d~include = key~include
INTO CORRESPONDING FIELDS OF TABLE @gt_data.
WHEN OTHERS.
ASSIGN gs_result-std TO <gv_diff>.
SELECT
*
FROM @gt_key_std AS key
INNER JOIN wbcrossgt AS d
ON d~otype = key~otype
AND d~name = key~name
AND d~include = key~include
INTO CORRESPONDING FIELDS OF TABLE @gt_data.
ENDCASE.
GET RUN TIME FIELD DATA(gv_end).
<gv_diff> = gv_end - gv_start.
ENDDO.
APPEND gs_result TO gt_result.
ENDDO.
gs_result-pass = 'Pass'.
WRITE: gs_result-pass,'|Standard | Sorted | Sorted Idx |'. NEW-LINE.
LOOP AT gt_result INTO gs_result.
WRITE: gs_result-pass.
IF gs_result-std <= gs_result-sort.
FORMAT COLOR = col_positive .
ELSE.
FORMAT COLOR = col_negative.
ENDIF.
WRITE gs_result-std.
IF gs_result-std >= gs_result-sort.
FORMAT COLOR = col_positive .
ELSE.
FORMAT COLOR = col_negative.
ENDIF.
WRITE gs_result-sort.
FORMAT COLOR = OFF.
WRITE gs_result-sort_idx.
NEW-LINE.
ENDLOOP.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment