Native SQL in S4 Reports without using EXEC SQL statement and having a better performance when using this FM
By
Kingsley Hopper
03 - July - 2020
DATA: gr_err TYPE REF TO cx_sy_native_sql_error,
lv_err_text TYPE string.
TRY.
EXEC SQL.
SET CONNECTION DEFAULT
ENDEXEC.
CATCH cx_sy_native_sql_error INTO gr_err.
lv_err_text = gr_err->get_text( ).
MESSAGE lv_err_text TYPE 'I' DISPLAY LIKE 'S' .
ENDTRY.
TYPES:
BEGIN OF ty_grant_roles,
grantee TYPE char30,
role_name TYPE char200,
END OF ty_grant_roles.
DATA: wa_grant_roles TYPE ty_grant_roles,
wa_users TYPE ty_users.
TRY.
EXEC SQL PERFORMING loop_and_write_output.
SELECT grantee,
role_name
INTO :wa_GRANT_ROLES
FROM GRANTED_ROLES WHERE GRANTEE NOT IN ( SELECT GRANTEE FROM GRANTED_ROLES WHERE ROLE_NAME <> 'PUBLIC' )
ORDER BY GRANTEE
ENDEXEC.
CATCH cx_sy_native_sql_error INTO gr_err.
lv_err_text = gr_err->get_text( ).
MESSAGE lv_err_text TYPE 'I' DISPLAY LIKE 'S' .
ENDTRY.
FORM loop_and_write_output.
APPEND wa_grant_roles TO lt_grant_roles.
ENDFORM.
TRY.
EXEC SQL.
DROP USER :LV_USER_NAME
ENDEXEC.
CATCH cx_sy_native_sql_error INTO err.
err_text = err->get_text( ).
ENDTRY.
TRY.
EXEC SQL.
DROP USER ABCDUSER
ENDEXEC.
CATCH cx_sy_native_sql_error INTO err.
err_text = err->get_text( ).
ENDTRY.
data: ls_sqlstatement type RSDR0_S_ABAPSOURCE,
lt_sqlstatement type RSDR0_T_ABAPSOURCE.
DATA: lv_error(72) type c,
lv_processed(1) type c,
lv_status(150) type c.
*********DROP USER**********************
refresh : lt_sqlstatement.
clear : ls_sqlstatement,lv_error,lv_processed.
CONCATENATE 'DROP USER' lv_user_name INTO ls_sqlstatement-line SEPARATED BY space.
append ls_sqlstatement to lt_sqlstatement.
CALL FUNCTION 'RSDU_EXEC_SQL_DB4'
EXPORTING
I_T_STMT = lt_sqlstatement
IMPORTING
E_SQLERRTXT = lv_error
CHANGING
C_PROCESSED = lv_processed
EXCEPTIONS
SQL_ERROR = 1
STATEMENT_TOO_COMPLEX = 2
NO_STATEMENT = 3
INHERITED_ERROR = 4
DUPREC = 5
OBJ_EXISTS = 6
OBJ_NOT_FOUND = 7
OTHERS = 8
.
IF sy-subrc <> 0.
** Implement suitable error handling here
ENDIF.
if lv_processed is not initial.
lv_status = 'Successfully dropped the user'.
endif.
*********DROP USER**********************
*********ALTER USER ENABLE PASSWORD**********************
refresh : lt_sqlstatement.
clear : ls_sqlstatement,lv_error,lv_processed.
CONCATENATE 'ALTER USER' lv_user_name 'ENABLE PASSWORD' INTO ls_sqlstatement-line SEPARATED BY space.
append ls_sqlstatement to lt_sqlstatement.
CALL FUNCTION 'RSDU_EXEC_SQL_DB4'
EXPORTING
I_T_STMT = lt_sqlstatement
IMPORTING
E_SQLERRTXT = lv_error
CHANGING
C_PROCESSED = lv_processed
EXCEPTIONS
SQL_ERROR = 1
STATEMENT_TOO_COMPLEX = 2
NO_STATEMENT = 3
INHERITED_ERROR = 4
DUPREC = 5
OBJ_EXISTS = 6
OBJ_NOT_FOUND = 7
OTHERS = 8
.
IF sy-subrc <> 0.
** Implement suitable error handling here
ENDIF.
if lv_processed is not initial.
lv_status = 'Successfully enabled password for the user'.
endif.
*********ALTER USER ENABLE PASSWORD**********************
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
7 | |
6 | |
4 | |
4 | |
3 | |
3 | |
2 | |
2 | |
2 |