Quantcast
Channel: SCN: Message List
Viewing all articles
Browse latest Browse all 8623

CL_SQL_STATEMENT versus direct SELECT

$
0
0

Hi Guys,

 

at this moment I want to create a generic function that is able to fetch data directly from the database via a query.

Since I want to have some freedom in adding nested selects etcetera I wanted to use the CL_SQL_STATEMENT class.

 

Unfortunatly this class doesn't return the same result as a direct select. It seems that the numerical fields get shifted (after 3000 characters). See screenshot/code sample and database definition below. Any suggestions?

 

cl_sql_statment.png

 

Please consider the following (very large) database definition for my table (ZTB_IU_NBI_RAW):

 

FIELDTYPELENGTHDECIMALS
MANDTCLNT30
MESSAGEIDCHAR150
MESSAGETYPECHAR500
MESSAGESEQNRCHAR100
CREATEUSERCHAR120
CREATEDATEDATS80
CREATETIMETIMS60
EANCODECHAR180
BPNUONIDCHAR100
BPNAMECHAR400
BILLACCOUNTNAMECHAR400
BILLACCOUNTNAME2CHAR400
BPPACHAR400
ENERGYTYPECODECHAR20
BILLPACHAR400
BPSTREETADDRCHAR600
BPHOUSENUMBERCHAR100
BPHOUSESUFFIXCHAR100
BPPOSTCODECHAR100
BPCITYCHAR400
BPCOUNTRYCHAR30
BILLSTREETADDRCHAR600
BILLHOUSENUMBERCHAR100
BILLHOUSESUFFIXCHAR100
BILLPOSTCODECHAR100
BILLCITYCHAR400
BILLCOUNTRYCHAR30
BILLEMAILADDRCHAR1320
BILLPIDCHAR500
BPKINDCHAR40
BPLEGALFORMCHAR20
INCOMINGBANKKEYCHAR150
INCOMINGBANKNRCHAR340
OUTGOINGBANKKEYCHAR150
OUTGOINGBANKNRCHAR340
VCRACCOUNTNUMBERCHAR120
CRDESCRIPTIONCHAR350
SUPPRESSBBFLAGCHAR10
SIEBELBILLTYPECHAR300
TERMSOFPAYMENTCHAR20
ACCOUNTDETIDCHAR20
DUNNINGPROCEDURECHAR20
PAYMENTMETHODCHAR300
CONTRACTNAMECHAR350
COMPANYRECEIVINGCHAR40
COSTCENTERRCVCHAR100
SIEBELDEVCATCHAR300
SINGLETARIFFCHAR30
BBBEGININGENDCHAR300
PROFILECATEGORYCHAR80
GOSEANCHAR180
GRIDOPERATORCHAR180
PRODUCTNAMECHAR300
CONTRACTYRVOLGCHAR170
CONTRACTYRVOLECHAR170
GASSALESOFFSETCHAR170
GASFIXEDFEECHAR170
COMPANYPCTCHAR170
LOWVATRATECHAR10
NROFHOUSESCHAR170
GASFIXEDCHAR100
GASINDEXPRICECHAR170
GASSALESPRICECHAR170
BRANCHCODECHAR300
CONTRACTIDCHAR300
PURCHASECOMBIDCHAR300
CONVENANTAGRMTCHAR10
NONBUSINESSUSAGECHAR10
EKWCHARGECHAR100
SPLITPURCHASECHAR10
CAPACITYCHAR170
EOFFPEAKPRICECHAR100
EPEAKPRICECHAR100
EFIXEDFEECHAR100
HERPRIJSFLAGCHAR10
EINTEGRALPRICECHAR100
DEVSTREETADDRCHAR600
DEVHOUSENRCHAR100
DEVHOUSENRSFFXCHAR100
DEVICECITYCHAR400
DEVICEPOSTCODECHAR100
PPSTARTDATECHAR100
PPENDDATECHAR100
ASSETSTARTDATECHAR100
ASSETENDDATECHAR100
ASSETMOVEINDATECHAR100
ASSETMOVEOUTDATECHAR100
REVISIONREASONCHAR500
VIGROUPINGCHAR30
CONTRACTSHORTCHAR30
GVKVINDICATORCHAR20
DUNBRADSTREETNRCHAR600
KVKNUMBERCHAR600
SIEBELUSERIDCHAR120
EBDECSTARTDATECHAR100
EBDECENDDATECHAR100
EBDECTYPECHAR500
HEFFINGSKORTINGCHAR10
VCRDESCRIPTIONCHAR350
PAYEEACCOUNTNAMECHAR400
PAYEEACCOUNTNAM2CHAR400
PAYEEPACHAR400
PAYEESTREETADDRCHAR600
PAYEEHOUSENUMBERCHAR100
PAYEEHOUSESUFFIXCHAR100
PAYEEPOSTCODECHAR100
PAYEECITYCHAR400
PAYEECOUNTRYCHAR30
PAYEEEMAILADDRCHAR1320
PAYEEPIDCHAR500
BBBILLMONTHCHAR20
BBFREQUENCYCHAR300
REVACTIVDATECHAR100
PEAKPERCENTAGECHAR60
EDSNBILLINGMONTHCHAR20
PAYERACCOUNTNAMECHAR400
PAYERACCOUNTNAM2CHAR400
PAYERPACHAR400
PAYERSTREETADDRCHAR600
PAYERHOUSENUMBERCHAR100
PAYERHOUSESUFFIXCHAR100
PAYERPOSTCODECHAR100
PAYERCITYCHAR400
PAYERCOUNTRYCHAR30
PAYEREMAILADDRCHAR1320
PAYERPIDCHAR500
COPYINVOICECHAR10
FIXEDREGIONCOSTCHAR100
LINEITEMSTARTDATCHAR100
COMMINTERNAMECHAR300
COMMINTERBTWCHAR300
COMMFEEECHAR100
COMMFEEGCHAR100
COMMFEEASSETCHAR100
METERNOCHAR180
CAPACITYPHYSICCHAR50
PHYSICALSTATUSCHAR30
ADMINSTATUSCHAR30
METERTYPECHAR30
METERINGMETHODCHAR30
CAPACITYTARIFFCHAR130
TEMPERATURECORRCHAR10
DIALID1CHAR50
TARIFFTYPE1CHAR10
METERINGDIR1CHAR30
MEASUREUNIT1CHAR30
NRDIGITS1NUMC10
MULTPLICFACTOR1CHAR90
DIALID2CHAR50
TARIFFTYPE2CHAR10
METERINGDIR2CHAR30
MEASUREUNIT2CHAR30
NRDIGITS2NUMC10
MULTPLICFACTOR2CHAR90
DIALID3CHAR50
TARIFFTYPE3CHAR10
METERINGDIR3CHAR30
MEASUREUNIT3CHAR30
NRDIGITS3NUMC10
MULTPLICFACTOR3CHAR90
DIALID4CHAR50
TARIFFTYPE4CHAR10
METERINGDIR4CHAR30
MEASUREUNIT4CHAR30
NRDIGITS4NUMC10
MULTPLICFACTOR4CHAR90
NODIALSCHAR10
COLLECTIONMETHODCHAR40
COLLECTIONZPIDCHAR100
COLLZPFIRSTNAMECHAR400
COLLZPPREFIXCHAR200
COLLZPLASTNAMECHAR400
COLLZPEMAILCHAR1320
COLLZPSTREETCHAR600
COLLZPHOUSENRCHAR100
COLLZPHOUSESUFCHAR100
COLLZPPOSTCODECHAR100
COLLZPCITYCHAR400
COLLZPCOUNTRYCHAR30
REASONIDCHAR30
TRANSACTIONIDCHAR250
ANLARTCHAR40
VKOCHAR30
MNDIDCHAR350
B2BCHAR10
VAL_FROM_DATEDATS80
FORCEENDBILLCHAR10
VAL_STARTCHAR100
TYPE_OF_SUPPLYCHAR10

 

Please consider this code:

 

REPORT ztest_cl_sql_statement.DATA scr_messageid TYPE zde_iu_nbi_messid.
SELECT-OPTIONS so_mess FOR scr_messageid.INITIALIZATION.  so_mess[]=VALUE #(SIGN='I'OPTION='EQ'(LOW='1-IAENKH')  (LOW='1-IDS6SW')  (LOW='1-IDSL1O')  (LOW='1-II9KK6')  (LOW='1-IIKMUM')  (LOW='1-IIKMUS')  (LOW='1-IKM9L9')).START-OF-SELECTION.  DATA lv_query TYPESTRING.  DATA lt_test TYPESTANDARD TABLE OF ztb_iu_nbi_raw.  DATA lt_testd TYPESTANDARD TABLE OF ztb_iu_nbi_raw.  lv_query = |SELECT*FROM ZTB_IU_NBI_RAW WHERE mandt ='261'|.  DATA lv_sub TYPESTRING.  LOOP AT so_mess ASSIGNING FIELD-SYMBOL(<fs_m>).    IF sy-tabix EQ1.      lv_sub = |AND messageid IN('{ <fs_m>-low }' |.    ELSEIF sy-tabix EQLINES( so_mess ).      lv_sub = |{ lv_sub },'{ <fs_m>-low }')|.    ELSE.      lv_sub = |{ lv_sub },'{ <fs_m>-low }'|.    ENDIF.  ENDLOOP.  IF sy-subrc EQ0. lv_query = |{ lv_query }{ lv_sub }|.ENDIF.* New SQL approach  TRY.      DATA(lo_query)= NEW cl_sql_statement().      DATA(lo_result)= lo_query->execute_query( lv_query ).      lo_result->set_param_table( REF #( lt_test )).      lo_result->next_package().      lo_result->CLOSE().    CATCH cx_sql_exception INTODATA(lx_sql).      DATA(ev_message)= lx_sql->sql_message.  ENDTRY.* Versus old SQL approach  SELECT*FROM ztb_iu_nbi_raw INTOTABLE lt_testd WHERE messageid IN so_mess.* This statement fails - numeric fields in lt_nbid are shifted  ASSERT lt_test = lt_testd.

 

 

 

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      

MANDTCLNT30
MESSAGEIDCHAR150
MESSAGETYPECHAR500
MESSAGESEQNRCHAR100
CREATEUSERCHAR120
CREATEDATEDATS80
CREATETIMETIMS60
EANCODECHAR180
BPNUONIDCHAR100
BPNAMECHAR400
BILLACCOUNTNAMECHAR400
BILLACCOUNTNAME2CHAR400
BPPACHAR400
ENERGYTYPECODECHAR20
BILLPACHAR400
BPSTREETADDRCHAR600
BPHOUSENUMBERCHAR100
BPHOUSESUFFIXCHAR100
BPPOSTCODECHAR100
BPCITYCHAR400
BPCOUNTRYCHAR30
BILLSTREETADDRCHAR600
BILLHOUSENUMBERCHAR100
BILLHOUSESUFFIXCHAR100
BILLPOSTCODECHAR100
BILLCITYCHAR400
BILLCOUNTRYCHAR30
BILLEMAILADDRCHAR1320
BILLPIDCHAR500
BPKINDCHAR40
BPLEGALFORMCHAR20
INCOMINGBANKKEYCHAR150
INCOMINGBANKNRCHAR340
OUTGOINGBANKKEYCHAR150
OUTGOINGBANKNRCHAR340
VCRACCOUNTNUMBERCHAR120
CRDESCRIPTIONCHAR350
SUPPRESSBBFLAGCHAR10
SIEBELBILLTYPECHAR300
TERMSOFPAYMENTCHAR20
ACCOUNTDETIDCHAR20
DUNNINGPROCEDURECHAR20
PAYMENTMETHODCHAR300
CONTRACTNAMECHAR350
COMPANYRECEIVINGCHAR40
COSTCENTERRCVCHAR100
SIEBELDEVCATCHAR300
SINGLETARIFFCHAR30
BBBEGININGENDCHAR300
PROFILECATEGORYCHAR80
GOSEANCHAR180
GRIDOPERATORCHAR180
PRODUCTNAMECHAR300
CONTRACTYRVOLGCHAR170
CONTRACTYRVOLECHAR170
GASSALESOFFSETCHAR170
GASFIXEDFEECHAR170
COMPANYPCTCHAR170
LOWVATRATECHAR10
NROFHOUSESCHAR170
GASFIXEDCHAR100
GASINDEXPRICECHAR170
GASSALESPRICECHAR170
BRANCHCODECHAR300
CONTRACTIDCHAR300
PURCHASECOMBIDCHAR300
CONVENANTAGRMTCHAR10
NONBUSINESSUSAGECHAR10
EKWCHARGECHAR100
SPLITPURCHASECHAR10
CAPACITYCHAR170
EOFFPEAKPRICECHAR100
EPEAKPRICECHAR100
EFIXEDFEECHAR100
HERPRIJSFLAGCHAR10
EINTEGRALPRICECHAR100
DEVSTREETADDRCHAR600
DEVHOUSENRCHAR100
DEVHOUSENRSFFXCHAR100
DEVICECITYCHAR400
DEVICEPOSTCODECHAR100
PPSTARTDATECHAR100
PPENDDATECHAR100
ASSETSTARTDATECHAR100
ASSETENDDATECHAR100
ASSETMOVEINDATECHAR100
ASSETMOVEOUTDATECHAR100
REVISIONREASONCHAR500
VIGROUPINGCHAR30
CONTRACTSHORTCHAR30
GVKVINDICATORCHAR20
DUNBRADSTREETNRCHAR600
KVKNUMBERCHAR600
SIEBELUSERIDCHAR120
EBDECSTARTDATECHAR100
EBDECENDDATECHAR100
EBDECTYPECHAR500
HEFFINGSKORTINGCHAR10
VCRDESCRIPTIONCHAR350
PAYEEACCOUNTNAMECHAR400
PAYEEACCOUNTNAM2CHAR400
PAYEEPACHAR400
PAYEESTREETADDRCHAR600
PAYEEHOUSENUMBERCHAR100
PAYEEHOUSESUFFIXCHAR100
PAYEEPOSTCODECHAR100
PAYEECITYCHAR400
PAYEECOUNTRYCHAR30
PAYEEEMAILADDRCHAR1320
PAYEEPIDCHAR500
BBBILLMONTHCHAR20
BBFREQUENCYCHAR300
REVACTIVDATECHAR100
PEAKPERCENTAGECHAR60
EDSNBILLINGMONTHCHAR20
PAYERACCOUNTNAMECHAR400
PAYERACCOUNTNAM2CHAR400
PAYERPACHAR400
PAYERSTREETADDRCHAR600
PAYERHOUSENUMBERCHAR100
PAYERHOUSESUFFIXCHAR100
PAYERPOSTCODECHAR100
PAYERCITYCHAR400
PAYERCOUNTRYCHAR30
PAYEREMAILADDRCHAR1320
PAYERPIDCHAR500
COPYINVOICECHAR10
FIXEDREGIONCOSTCHAR100
LINEITEMSTARTDATCHAR100
COMMINTERNAMECHAR300
COMMINTERBTWCHAR300
COMMFEEECHAR100
COMMFEEGCHAR100
COMMFEEASSETCHAR100
METERNOCHAR180
CAPACITYPHYSICCHAR50
PHYSICALSTATUSCHAR30
ADMINSTATUSCHAR30
METERTYPECHAR30
METERINGMETHODCHAR30
CAPACITYTARIFFCHAR130
TEMPERATURECORRCHAR10
DIALID1CHAR50
TARIFFTYPE1CHAR10
METERINGDIR1CHAR30
MEASUREUNIT1CHAR30
NRDIGITS1NUMC10
MULTPLICFACTOR1CHAR90
DIALID2CHAR50
TARIFFTYPE2CHAR10
METERINGDIR2CHAR30
MEASUREUNIT2CHAR30
NRDIGITS2NUMC10
MULTPLICFACTOR2CHAR90
DIALID3CHAR50
TARIFFTYPE3CHAR10
METERINGDIR3CHAR30
MEASUREUNIT3CHAR30
NRDIGITS3NUMC10
MULTPLICFACTOR3CHAR90
DIALID4CHAR50
TARIFFTYPE4CHAR10
METERINGDIR4CHAR30
MEASUREUNIT4CHAR30
NRDIGITS4NUMC10
MULTPLICFACTOR4CHAR90
NODIALSCHAR10
COLLECTIONMETHODCHAR40
COLLECTIONZPIDCHAR100
COLLZPFIRSTNAMECHAR400
COLLZPPREFIXCHAR200
COLLZPLASTNAMECHAR400
COLLZPEMAILCHAR1320
COLLZPSTREETCHAR600
COLLZPHOUSENRCHAR100
COLLZPHOUSESUFCHAR100
COLLZPPOSTCODECHAR100
COLLZPCITYCHAR400
COLLZPCOUNTRYCHAR30
REASONIDCHAR30
TRANSACTIONIDCHAR250
ANLARTCHAR40
VKOCHAR30
MNDIDCHAR350
B2BCHAR10
VAL_FROM_DATEDATS80
FORCEENDBILLCHAR10
VAL_STARTCHAR100
TYPE_OF_SUPPLYCHAR10

Viewing all articles
Browse latest Browse all 8623

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>