<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Does ADBC facilitate code push down on Oracle DB? in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/does-adbc-facilitate-code-push-down-on-oracle-db/m-p/12541310#M2006110</link>
    <description>&lt;P&gt;Hi Members,&lt;/P&gt;
  &lt;P&gt;I used ADBC technique to facilitate code push down on oracle database. Bothe the connection and query execution are successful but there's error in reading data using the method next_package. Please see my code below and help out.&lt;/P&gt;
  &lt;PRE&gt;&lt;CODE&gt;""@@Obtaining last movement date.&lt;BR /&gt;*    * Establish the DB connection (ORACLE DB)&lt;BR /&gt;    DATA: db_con  TYPE dbcon_name,&lt;BR /&gt;          con_obj TYPE REF TO cl_sql_connection.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;    CREATE OBJECT con_obj.&lt;BR /&gt;    CALL METHOD con_obj-&amp;gt;get_con_name&lt;BR /&gt;      RECEIVING&lt;BR /&gt;        con_name = db_con.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;    TRY.&lt;BR /&gt;        CLEAR v_msg.&lt;BR /&gt;        CALL METHOD cl_sql_connection=&amp;gt;get_connection&lt;BR /&gt;          EXPORTING&lt;BR /&gt;            con_name = db_con&lt;BR /&gt;*            sharable = space&lt;BR /&gt;          RECEIVING&lt;BR /&gt;            con_ref  = o_con.&lt;BR /&gt;&lt;BR /&gt;      CATCH cx_sql_exception INTO  o_sql_excp .&lt;BR /&gt;        CALL METHOD o_sql_excp-&amp;gt;if_message~get_longtext&lt;BR /&gt;          RECEIVING&lt;BR /&gt;            result = v_msg.&lt;BR /&gt;        .&lt;BR /&gt;        WRITE :/ 'Error in Establishing DB connection :',v_msg.&lt;BR /&gt;    ENDTRY.&lt;BR /&gt;&lt;BR /&gt;    IF o_con IS BOUND.&lt;BR /&gt;*  * Instantiate the statement class on top of DB connection&lt;BR /&gt;      DATA: o_stmt TYPE REF TO cl_sql_statement.&lt;BR /&gt;      CREATE OBJECT o_stmt&lt;BR /&gt;        EXPORTING&lt;BR /&gt;          con_ref = o_con.&lt;BR /&gt;    ENDIF.&lt;BR /&gt;&lt;BR /&gt;    BREAK-POINT.&lt;BR /&gt;    IF o_stmt IS BOUND.&lt;BR /&gt;**    Construct the sql query containing select statement&lt;BR /&gt;      DATA: v_sql TYPE string.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;      v_sql = | SELECT MK.MBLNR, MK.MJAHR, MK.BUDAT, MS.MATNR, MS.WERKS | &amp;amp;&amp;amp;&lt;BR /&gt;                 | FROM MKPF AS MK INNER JOIN MSEG AS MS | &amp;amp;&amp;amp;&lt;BR /&gt;                 | ON MK.MBLNR = MS.MBLNR AND MK.MJAHR = MS.MJAHR| &amp;amp;&amp;amp;&lt;BR /&gt;                 | WHERE MS.MATNR = { wa_mbew-matnr } AND MS.WERKS = { wa_mbew-bwkey } | &amp;amp;&amp;amp;&lt;BR /&gt;                 | ORDER BY MK.BUDAT | &amp;amp;&amp;amp;&lt;BR /&gt;                 || .&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;*      * Execute Select Query&lt;BR /&gt;&lt;BR /&gt;      DATA : o_result TYPE REF TO cl_sql_result_set,&lt;BR /&gt;             o_param  TYPE REF TO cx_parameter_invalid.&lt;BR /&gt;      TRY.&lt;BR /&gt;          CALL METHOD o_stmt-&amp;gt;execute_query&lt;BR /&gt;            EXPORTING&lt;BR /&gt;              statement  = v_sql&lt;BR /&gt;*             hold_cursor = SPACE&lt;BR /&gt;            RECEIVING&lt;BR /&gt;              result_set = o_result.&lt;BR /&gt;        CATCH cx_sql_exception INTO o_sql_excp.&lt;BR /&gt;          CLEAR v_msg.&lt;BR /&gt;          CALL METHOD o_sql_excp-&amp;gt;if_message~get_longtext&lt;BR /&gt;            RECEIVING&lt;BR /&gt;              result = v_msg.&lt;BR /&gt;          WRITE :/ 'Error in Executing select query :',v_msg.&lt;BR /&gt;        CATCH cx_parameter_invalid INTO o_param.&lt;BR /&gt;          CLEAR v_msg.&lt;BR /&gt;          CALL METHOD o_param-&amp;gt;if_message~get_longtext&lt;BR /&gt;            RECEIVING&lt;BR /&gt;              result = v_msg.&lt;BR /&gt;&lt;BR /&gt;          WRITE :/ 'Error in Parameter binding ....',v_msg.&lt;BR /&gt;&lt;BR /&gt;      ENDTRY.&lt;BR /&gt;&lt;BR /&gt;    ENDIF.&lt;BR /&gt;    IF o_result IS BOUND. "not initial&lt;BR /&gt;      WRITE :/ 'Select Query successfully executed...'.&lt;BR /&gt;*    * set the Internal table parameter&lt;BR /&gt;*      data it_mseg_mkpf type TABLE OF WB2_V_MKPF_MSEG.&lt;BR /&gt;      DATA o_data TYPE REF TO data.&lt;BR /&gt;&lt;BR /&gt;      GET REFERENCE OF it_mseg_mkpf INTO o_data.&lt;BR /&gt;&lt;BR /&gt;* set the internal table as out parameter&lt;BR /&gt;      TRY.&lt;BR /&gt;          CALL METHOD o_result-&amp;gt;set_param_table&lt;BR /&gt;            EXPORTING&lt;BR /&gt;              itab_ref = o_data.&lt;BR /&gt;        CATCH cx_parameter_invalid INTO o_param .&lt;BR /&gt;          CLEAR v_msg.&lt;BR /&gt;          CALL METHOD o_param-&amp;gt;if_message~get_longtext&lt;BR /&gt;            RECEIVING&lt;BR /&gt;              result = v_msg.&lt;BR /&gt;          WRITE :/ 'Error in setting internal table as OUT parameter ...',v_msg.&lt;BR /&gt;      ENDTRY.&lt;BR /&gt;&lt;BR /&gt;* Retrieve result set&lt;BR /&gt;      DATA o_param_type TYPE REF TO cx_parameter_invalid_type.&lt;BR /&gt;&lt;BR /&gt;      TRY.&lt;BR /&gt;          CALL METHOD o_result-&amp;gt;next_package.&lt;BR /&gt;&lt;BR /&gt;        CATCH cx_sql_exception INTO o_sql_excp.&lt;BR /&gt;          CLEAR v_msg.&lt;BR /&gt;          CALL METHOD o_sql_excp-&amp;gt;if_message~get_longtext&lt;BR /&gt;            RECEIVING&lt;BR /&gt;              result = v_msg.&lt;BR /&gt;          WRITE :/ 'Error in reading result set :',v_msg.&lt;BR /&gt;&lt;BR /&gt;        CATCH cx_parameter_invalid_type .&lt;BR /&gt;          CLEAR v_msg.&lt;BR /&gt;          CALL METHOD o_param_type-&amp;gt;if_message~get_longtext&lt;BR /&gt;            RECEIVING&lt;BR /&gt;              result = v_msg.&lt;BR /&gt;          WRITE :/ 'Error in parameter type while reading result set :',v_msg.&lt;BR /&gt;      ENDTRY.&lt;BR /&gt;&lt;BR /&gt;*        * close the result set&lt;BR /&gt;      CALL METHOD o_result-&amp;gt;close.&lt;BR /&gt;&lt;BR /&gt;      TRY.&lt;BR /&gt;          CALL METHOD o_con-&amp;gt;close.&lt;BR /&gt;          CLEAR v_msg.&lt;BR /&gt;        CATCH cx_sql_exception INTO o_sql_excp.&lt;BR /&gt;          CALL METHOD o_sql_excp-&amp;gt;if_message~get_longtext&lt;BR /&gt;            RECEIVING&lt;BR /&gt;              result = v_msg.&lt;BR /&gt;&lt;BR /&gt;          WRITE :/ 'Error in closing DB connection :',v_msg.&lt;BR /&gt;      ENDTRY.&lt;BR /&gt;&lt;BR /&gt;*      ENDTRY.&lt;BR /&gt;&lt;BR /&gt;    ENDIF.&lt;BR /&gt;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Sat, 27 Nov 2021 11:55:04 GMT</pubDate>
    <dc:creator>Above</dc:creator>
    <dc:date>2021-11-27T11:55:04Z</dc:date>
    <item>
      <title>Does ADBC facilitate code push down on Oracle DB?</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/does-adbc-facilitate-code-push-down-on-oracle-db/m-p/12541310#M2006110</link>
      <description>&lt;P&gt;Hi Members,&lt;/P&gt;
  &lt;P&gt;I used ADBC technique to facilitate code push down on oracle database. Bothe the connection and query execution are successful but there's error in reading data using the method next_package. Please see my code below and help out.&lt;/P&gt;
  &lt;PRE&gt;&lt;CODE&gt;""@@Obtaining last movement date.&lt;BR /&gt;*    * Establish the DB connection (ORACLE DB)&lt;BR /&gt;    DATA: db_con  TYPE dbcon_name,&lt;BR /&gt;          con_obj TYPE REF TO cl_sql_connection.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;    CREATE OBJECT con_obj.&lt;BR /&gt;    CALL METHOD con_obj-&amp;gt;get_con_name&lt;BR /&gt;      RECEIVING&lt;BR /&gt;        con_name = db_con.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;    TRY.&lt;BR /&gt;        CLEAR v_msg.&lt;BR /&gt;        CALL METHOD cl_sql_connection=&amp;gt;get_connection&lt;BR /&gt;          EXPORTING&lt;BR /&gt;            con_name = db_con&lt;BR /&gt;*            sharable = space&lt;BR /&gt;          RECEIVING&lt;BR /&gt;            con_ref  = o_con.&lt;BR /&gt;&lt;BR /&gt;      CATCH cx_sql_exception INTO  o_sql_excp .&lt;BR /&gt;        CALL METHOD o_sql_excp-&amp;gt;if_message~get_longtext&lt;BR /&gt;          RECEIVING&lt;BR /&gt;            result = v_msg.&lt;BR /&gt;        .&lt;BR /&gt;        WRITE :/ 'Error in Establishing DB connection :',v_msg.&lt;BR /&gt;    ENDTRY.&lt;BR /&gt;&lt;BR /&gt;    IF o_con IS BOUND.&lt;BR /&gt;*  * Instantiate the statement class on top of DB connection&lt;BR /&gt;      DATA: o_stmt TYPE REF TO cl_sql_statement.&lt;BR /&gt;      CREATE OBJECT o_stmt&lt;BR /&gt;        EXPORTING&lt;BR /&gt;          con_ref = o_con.&lt;BR /&gt;    ENDIF.&lt;BR /&gt;&lt;BR /&gt;    BREAK-POINT.&lt;BR /&gt;    IF o_stmt IS BOUND.&lt;BR /&gt;**    Construct the sql query containing select statement&lt;BR /&gt;      DATA: v_sql TYPE string.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;      v_sql = | SELECT MK.MBLNR, MK.MJAHR, MK.BUDAT, MS.MATNR, MS.WERKS | &amp;amp;&amp;amp;&lt;BR /&gt;                 | FROM MKPF AS MK INNER JOIN MSEG AS MS | &amp;amp;&amp;amp;&lt;BR /&gt;                 | ON MK.MBLNR = MS.MBLNR AND MK.MJAHR = MS.MJAHR| &amp;amp;&amp;amp;&lt;BR /&gt;                 | WHERE MS.MATNR = { wa_mbew-matnr } AND MS.WERKS = { wa_mbew-bwkey } | &amp;amp;&amp;amp;&lt;BR /&gt;                 | ORDER BY MK.BUDAT | &amp;amp;&amp;amp;&lt;BR /&gt;                 || .&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;*      * Execute Select Query&lt;BR /&gt;&lt;BR /&gt;      DATA : o_result TYPE REF TO cl_sql_result_set,&lt;BR /&gt;             o_param  TYPE REF TO cx_parameter_invalid.&lt;BR /&gt;      TRY.&lt;BR /&gt;          CALL METHOD o_stmt-&amp;gt;execute_query&lt;BR /&gt;            EXPORTING&lt;BR /&gt;              statement  = v_sql&lt;BR /&gt;*             hold_cursor = SPACE&lt;BR /&gt;            RECEIVING&lt;BR /&gt;              result_set = o_result.&lt;BR /&gt;        CATCH cx_sql_exception INTO o_sql_excp.&lt;BR /&gt;          CLEAR v_msg.&lt;BR /&gt;          CALL METHOD o_sql_excp-&amp;gt;if_message~get_longtext&lt;BR /&gt;            RECEIVING&lt;BR /&gt;              result = v_msg.&lt;BR /&gt;          WRITE :/ 'Error in Executing select query :',v_msg.&lt;BR /&gt;        CATCH cx_parameter_invalid INTO o_param.&lt;BR /&gt;          CLEAR v_msg.&lt;BR /&gt;          CALL METHOD o_param-&amp;gt;if_message~get_longtext&lt;BR /&gt;            RECEIVING&lt;BR /&gt;              result = v_msg.&lt;BR /&gt;&lt;BR /&gt;          WRITE :/ 'Error in Parameter binding ....',v_msg.&lt;BR /&gt;&lt;BR /&gt;      ENDTRY.&lt;BR /&gt;&lt;BR /&gt;    ENDIF.&lt;BR /&gt;    IF o_result IS BOUND. "not initial&lt;BR /&gt;      WRITE :/ 'Select Query successfully executed...'.&lt;BR /&gt;*    * set the Internal table parameter&lt;BR /&gt;*      data it_mseg_mkpf type TABLE OF WB2_V_MKPF_MSEG.&lt;BR /&gt;      DATA o_data TYPE REF TO data.&lt;BR /&gt;&lt;BR /&gt;      GET REFERENCE OF it_mseg_mkpf INTO o_data.&lt;BR /&gt;&lt;BR /&gt;* set the internal table as out parameter&lt;BR /&gt;      TRY.&lt;BR /&gt;          CALL METHOD o_result-&amp;gt;set_param_table&lt;BR /&gt;            EXPORTING&lt;BR /&gt;              itab_ref = o_data.&lt;BR /&gt;        CATCH cx_parameter_invalid INTO o_param .&lt;BR /&gt;          CLEAR v_msg.&lt;BR /&gt;          CALL METHOD o_param-&amp;gt;if_message~get_longtext&lt;BR /&gt;            RECEIVING&lt;BR /&gt;              result = v_msg.&lt;BR /&gt;          WRITE :/ 'Error in setting internal table as OUT parameter ...',v_msg.&lt;BR /&gt;      ENDTRY.&lt;BR /&gt;&lt;BR /&gt;* Retrieve result set&lt;BR /&gt;      DATA o_param_type TYPE REF TO cx_parameter_invalid_type.&lt;BR /&gt;&lt;BR /&gt;      TRY.&lt;BR /&gt;          CALL METHOD o_result-&amp;gt;next_package.&lt;BR /&gt;&lt;BR /&gt;        CATCH cx_sql_exception INTO o_sql_excp.&lt;BR /&gt;          CLEAR v_msg.&lt;BR /&gt;          CALL METHOD o_sql_excp-&amp;gt;if_message~get_longtext&lt;BR /&gt;            RECEIVING&lt;BR /&gt;              result = v_msg.&lt;BR /&gt;          WRITE :/ 'Error in reading result set :',v_msg.&lt;BR /&gt;&lt;BR /&gt;        CATCH cx_parameter_invalid_type .&lt;BR /&gt;          CLEAR v_msg.&lt;BR /&gt;          CALL METHOD o_param_type-&amp;gt;if_message~get_longtext&lt;BR /&gt;            RECEIVING&lt;BR /&gt;              result = v_msg.&lt;BR /&gt;          WRITE :/ 'Error in parameter type while reading result set :',v_msg.&lt;BR /&gt;      ENDTRY.&lt;BR /&gt;&lt;BR /&gt;*        * close the result set&lt;BR /&gt;      CALL METHOD o_result-&amp;gt;close.&lt;BR /&gt;&lt;BR /&gt;      TRY.&lt;BR /&gt;          CALL METHOD o_con-&amp;gt;close.&lt;BR /&gt;          CLEAR v_msg.&lt;BR /&gt;        CATCH cx_sql_exception INTO o_sql_excp.&lt;BR /&gt;          CALL METHOD o_sql_excp-&amp;gt;if_message~get_longtext&lt;BR /&gt;            RECEIVING&lt;BR /&gt;              result = v_msg.&lt;BR /&gt;&lt;BR /&gt;          WRITE :/ 'Error in closing DB connection :',v_msg.&lt;BR /&gt;      ENDTRY.&lt;BR /&gt;&lt;BR /&gt;*      ENDTRY.&lt;BR /&gt;&lt;BR /&gt;    ENDIF.&lt;BR /&gt;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sat, 27 Nov 2021 11:55:04 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/does-adbc-facilitate-code-push-down-on-oracle-db/m-p/12541310#M2006110</guid>
      <dc:creator>Above</dc:creator>
      <dc:date>2021-11-27T11:55:04Z</dc:date>
    </item>
    <item>
      <title>Re: Does ADBC facilitate code push down on Oracle DB?</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/does-adbc-facilitate-code-push-down-on-oracle-db/m-p/12541311#M2006111</link>
      <description>&lt;P&gt;It's not called "code push-down", this is a feature of AMDP methods, you're talking about executing "&lt;B&gt;native &lt;/B&gt;(Oracle) &lt;B&gt;SQL&lt;/B&gt;".&lt;/P&gt;&lt;P&gt;If you display o_sql_excp using the debugger, you'll see the detailed message and other information about what the error is. Another possibility is to execute your code directly using an Oracle SQL console, and you'll see that there's an error and probably it will give more details about the error.&lt;/P&gt;&lt;P&gt;Wrong:&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;WHERE MS.MATNR = 0000000000000545054 AND MS.WERKS = ABCD&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Good:&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;WHERE MS.MATNR = '0000000000000545054' AND MS.WERKS = 'ABCD'&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;That said, you'd better use a Prepared Statement for better performance (reuse of execution plan), so that to define 2 placeholders so that to bind variables:&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;WHERE MS.MATNR = ? AND MS.WERKS = ?&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;and use SET_PARAM sequentially to bind the value to each placeholder.&lt;/P&gt;</description>
      <pubDate>Sat, 27 Nov 2021 13:28:49 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/does-adbc-facilitate-code-push-down-on-oracle-db/m-p/12541311#M2006111</guid>
      <dc:creator>Sandra_Rossi</dc:creator>
      <dc:date>2021-11-27T13:28:49Z</dc:date>
    </item>
  </channel>
</rss>

