Created
November 25, 2024 08:10
-
-
Save alezhu/6400f82327d50d6b285ef34b784ed2a2 to your computer and use it in GitHub Desktop.
SAP ABAP Test select from internal table with/without primary key
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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