SQL Server administration and T-SQL development, Web Programming with ASP.NET, HTML5 and Javascript, Windows Phone 8 app development, SAP Smartforms and ABAP Programming, Windows 7, Visual Studio and MS Office software SAP ABAP Programming and HANA Database Tutorials
Development resources, articles, tutorials, samples, codes and tools for .Net, SQL Server, Windows, Windows Phone, SAP and ABAP, like SAP UI5, Screen Personas, etc.




CRM Companies List
Web Based CRM Software


Select-Statement can be Transformed

During Code Inspector check on ABAP programs I got Select-Statement can be transformed errors for Search problematic SELECT * statements check category. I was optimizing ABAP codes that I used during my SAP developments for HANA migration to clear problematic cases for expected performance increase introduced with HANA.

Thanks to SAP Code Inspector SCI transaction which is used to list problems within ABAP programs that will decrease HANA performance if they are not corrected. So I executed Code Inspector and try to solve problematic "Select * statements" as I illustrated in this ABAP tutorial.

After ABAP programmers execute SCI Code Inspector, they will see many cases listed with changing rates of field usages but same error identified as "Select-Statement can be transformed" Here is a sample error listed as a result of Code Inspector check which I will correct using the method I will explain in this ABAP tutorial.

Search problematic SELECT * statements
Select-Statement can be transformed. 2.0% of fields used

problematic Select * statements: Select-statement can be transformed

Double click on reported item
Code inspector results will dispay the details for the selected problematic case. For example, following case illustrates where a SELECT statement is executed over SAP KNA1 table but only 4 fields of all existing from KNA1 table is used. This shows that selecting all fields from KNA1 table is unnecessary and will cause unused memory usage for keeping other fields except the reported 4 fields on HANA.

ABAP code optimization for HANA performance changing select * statements

On the same report, the ABAP Include where the SELECT statement or the problematic code exists is also provided for easy access of the developers. ABAP programmer can double click on a line to open the code editor directly from the Code Inspector result list.

When I check the ABAP code source, I see a sample usage of "SELECT * statement" as follows:

data LS_KNA1 type KNA1.
select single * into LS_KNA1 from KNA1 where KUNNR = LS_VBAK-KUNNR.
if SY-SUBRC = 0.
 clear LS_CONTENT.
 concatenate 'Customer:' LS_KNA1-KUNNR LS_KNA1-NAME1 LS_KNA1-NAME2 LS_KNA1-ORT01
   into LS_CONTENT separated by SPACE.
...

LS_KNA1 structure is populated with all data from KNA1 table for the related customer. But only 4 fields are used. So for the sake of memory optimizing we can only select related 4 columns and use within reported ABAP program.

One of the solution for this problematic SELECT statement is to use only necessary field names in the SELECT list and using INTO CORRESPONDING FIELDS OF to prevent storing column values in wrong fields within the target structure.
If you do not pay attention to this, especially in aggregate operations, you will get errors.
Even though you do not get an error while activating the ABAP program, it will cause wrong results.
Here is the updated ABAP code for HANA migration optimization.

data LS_KNA1 type KNA1.
select single kunnr name1 name2 ort01 into CORRESPONDING FIELDS OF LS_KNA1
 from KNA1 where KUNNR = LS_VBAK-KUNNR.
if SY-SUBRC = 0.
 clear LS_CONTENT.
 concatenate 'Customer:' LS_KNA1-KUNNR LS_KNA1-NAME1 LS_KNA1-NAME2 LS_KNA1-ORT01
   into LS_CONTENT separated by SPACE.
...

Although above ABAP code optimization is enough to solve the problematic SELECT * statement case, a further change can be done for the local structure definition.

TYPES:
BEGIN OF typ_kna1,
 kunnr TYPE kunnr,
 name1 TYPE name1_gp,
 name2 TYPE name2_gp,
 ort01 TYPE ort01_gp,
END OF typ_kna1.
DATA ls_kna1 TYPE typ_kna1.
select single kunnr name1 name2 ort01 into CORRESPONDING FIELDS OF LS_KNA1
 from KNA1 where KUNNR = LS_VBAK-KUNNR.
if SY-SUBRC = 0.
 clear LS_CONTENT.
 concatenate 'Customer:' LS_KNA1-KUNNR LS_KNA1-NAME1 LS_KNA1-NAME2 LS_KNA1-ORT01
   into LS_CONTENT separated by SPACE.
...

In order to check the affect of your code optimization efforts, you can use Code Inspector to Check your ABAP code directly from transactions like SE24, SE37 or SE38 using menu options as a cross-check.
For example, after optimization for HANA on problematic SELECT statements within the codes of an ABAP class, I run Code Inspector using the following menu options on SE24 Class Builder transaction screen.

SE24 > Object Type > Check > Code Inspector

check ABAP code using SAP Code Inspector






SAP Tutorials

SAP Tutorial

SAP Forums

SAP Tools

SAP Transaction Codes Table






Related Articles and Tutorials(http://www.kodyaz.com/sap-abap/select-statement-can-be-transformed.aspx)
Delete All Data from SAP Database Table
Export SAP Data to Fixed Length Text File
Prevent DYNPRO_SEND_IN_BACKGROUND Error in Background Process
How to Execute SAP Program in Background Task
How to Find Internal Table Row Count in ABAP
How to Debug Popup Screen in ABAP
ABAP LOOP Statement with At New and At End
Export Table Contents into Text File and Download File
ABAP Tutorial for SET and GET PARAMETER ID Command
Code Inspector: Unsecure use of FOR ALL ENTRIES
How to Upload Data to SAP from Excel File using alsm_excel_to_internal_table Function Module
ABAP - Create Hierarchy Tree List using rs_tree_construct, rs_tree_list_display and snodetext
ABAP Tutorial - ABAP String Split Example Code
Upload Data from Excel File in ABAP using TEXT_CONVERT_XLS_TO_SAP
Create CL_GUI_ALV_GRID ALV Grid Column Header using ABAP Data Element
How to Create SAPScript Text using SO10 Transaction Code
ALV Grid Color - Table Row Background Color in ALV List
ABAP Tutorial - SAP Split and ABAP Split String Function
CALL_FUNCTION_NOT_FOUND ABAP Run Time Error
Check Existence using ABAP SELECT
Create Business Object in SAP
SAP ABAP Tutorial - ALV Grid Example with cl_gui_alv_grid and Screen Painter
SAP Smartforms - How to Call Smartform within ABAP Program
SAP Tutorial - Convert Spool Request to PDF File using RSTXPDFT4 ABAP Report
Set Default Single Values List for SAP Selection Screen Parameter
ABAP Debugging using Log Point and Break Point
ABAP RegEx for ABAP Regular Expression to fetch Date from String
ABAP Runtime Error ST22 Transaction using Short Dump Analysis
ABAP Shared Memory Objects Tutorial with Sample ABAP Code
ABAP Try Catch for exception is neither caught Code Inspector Error
Add Year, Month or Day to Date Variable in ABAP using RP_CALC_DATE_IN_INTERVAL
Read Address Data using FM ADDR_GET instead of Querying ADRC Table
ABAP Authority-Check Object For User Other Than Current
SAP Code Inspector for ABAP Break-Point Statement
Call Function Module using RFC Destination in ABAP
How to Spell Numbers using ABAP Spell_Amount Function Module
Convert the table using the Database Utility (SE14)
Convert Sales Unit into Text using Function Module in Target Language
ABAP Code Inspector Check Variants for HANA Migration Optimization
Create SAP Dynamic Variant using Date Calculation
Create SAP Transaction to Maintain ABAP Table using SM30
Database Hint Pseudo-Comment for SAP Code Inspector
Delete Entries in NAST Table using RSCLNAST ABAP Program
Dynamic Programming using Field Symbols in ABAP Reports
Execute ABAP Program Automatically After Transport Request Import
Get Fullname of SAP user using Function Module in ABAP Program
How to Find User Exits in ABAP Codes of SAP Transaction
Read Integer and Decimals of a Numeric Value in ABAP Programming
Move Minus Sign from Right to Left of Negative Number in SAP Smartform
Primary key change not permitted for value table
Read Pricing Condition Text using ABAP in SAP Sales Document Output
Read Text Symbols in Specific Language using ABAP RS_TEXTPOOL_READ
Get SAP Document Flow using SD_DOCUMENT_FLOW_GET ABAP Function Module
Search and Find SAP Transaction Code using SE93 or SEARCH_SAP_MENU
SAP Code Inspector Error: Select For Cluster Table Without Order By
ABAP Select Statement using Space instead of Null or Initial
SAP Code Inspector: Select-Statement can be Transformed
ABAP CONVT_NO_NUMBER Error on SP01 due SP01_WARN Parameter
How to find string length using STRLEN ABAP string function
ABAP Submit Report to Run Another ABAP Program within Code
Transport Variants of an ABAP Program into Workbench Request
TVAP Item Category and SAP Table TVAPT for Text Translations
Update Multiple Variables in ABAP Select Single Statement
Function module is not released for the Internet
Activate Fixed Point Arithmetic Flag for Open SQL Statement
Switch ABAP Variable Value with Translate using Mask
Switch ABAP Variable Value with Translate using Mask
Activate Fixed Point Arithmetic Flag for Open SQL Statement
Activate Fixed Point Arithmetic Flag for Open SQL Statement
Activate Fixed Point Arithmetic Flag for Open SQL Statement
Activate Fixed Point Arithmetic Flag for Open SQL Statement
Activate Fixed Point Arithmetic Flag for Open SQL Statement
Activate Fixed Point Arithmetic Flag for Open SQL Statement
Activate Fixed Point Arithmetic Flag for Open SQL Statement
Activate Fixed Point Arithmetic Flag for Open SQL Statement
Activate Fixed Point Arithmetic Flag for Open SQL Statement
Activate Fixed Point Arithmetic Flag for Open SQL Statement
Activate Fixed Point Arithmetic Flag for Open SQL Statement


Copyright © 2004 - 2017 Eralper YILMAZ. All rights reserved.
Community Server by Telligent Systems