SAP NetWeaver AS ABAP Release 740, ©Copyright 2014 SAP AG. All rights reserved.
ABAP Keyword Documentation → ABAP − Reference → Processing External Data → ABAP Database Accesses → Native SQL → ADBC - ABAP Database Connectivity → Examples of ADBC →ADBC, Stored Procedure
The example demonstrates the execution of a stored procedure using ADBC.
Source Code
REPORT demo_adbc_stored_procedure.
CLASS demo DEFINITION.
PUBLIC SECTION.
CLASS-METHODS main.
ENDCLASS.
CLASS demo IMPLEMENTATION.
METHOD main.
DATA incprice TYPE sflight-price.
DATA price_before TYPE sflight-price.
DATA price_after TYPE sflight-price.
SELECT SINGLE price FROM sflight INTO price_before.
cl_demo_input=>request( CHANGING field = incprice ).
IF incprice IS INITIAL.
RETURN.
ENDIF.
DATA(sql) = NEW cl_sql_statement( ).
TRY.
CASE sy-dbsys(3).
WHEN 'HDB'.
TRY.
sql->execute_ddl(
'DROP PROCEDURE abap_docu_demo_incprice' ).
CATCH cx_sql_exception ##NO_HANDLER.
ENDTRY.
sql->execute_ddl(
`CREATE PROCEDURE `
&& `abap_docu_demo_incprice (IN inc DECIMAL(15,2)) AS `
&& `BEGIN `
&& `UPDATE sflight SET price = price + :inc`
&& `
WHERE mandt = '` && sy-mandt && `'; `
&& `END` ).
sql->set_param( data_ref = REF #( incprice )
inout = cl_sql_statement=>c_param_in ).
sql->execute_procedure(
proc_name = 'abap_docu_demo_incprice' ).
WHEN 'ADA'.
TRY.
sql->execute_ddl(
'DROP PROCEDURE abap_docu_demo_incprice' ).
CATCH cx_sql_exception ##NO_HANDLER.
ENDTRY.
DATA schema TYPE c LENGTH 256.
CALL FUNCTION 'DB_DBSCHEMA'
IMPORTING
dbschema = schema.
sql->execute_ddl(
`CREATE DBPROC abap_docu_demo_incprice `
&& `(IN inc VARCHAR(15)) AS `
&& `UPDATE `
&& cl_abap_dyn_prg=>check_whitelist_str(
val = schema
whitelist = `SAP` && sy-sysid ) && `.sflight `
&& ` SET price = price + TO_NUMBER(:inc)`
&& ` WHERE mandt = '` && sy-mandt && `'; ` ).
DATA(char_incprice) = CONV string( incprice ).
sql->set_param( data_ref = REF #( char_incprice )
inout = cl_sql_statement=>c_param_in ).
sql->execute_procedure(
proc_name = 'abap_docu_demo_incprice' ).
WHEN 'ORA'.
sql->execute_ddl(
`CREATE OR REPLACE PROCEDURE `
&& `abap_docu_demo_incprice (inc IN NUMBER) IS `
&& `BEGIN `
&& `UPDATE sflight SET price = price + inc`
&& `
WHERE mandt = '` && sy-mandt && `'; `
&& `END;` ).
sql->set_param( data_ref = REF #( incprice )
inout = cl_sql_statement=>c_param_in ).
sql->execute_procedure(
proc_name = 'abap_docu_demo_incprice' ).
WHEN OTHERS.
cl_demo_output=>display( `Example is not supported for `
&& sy-dbsys ).
LEAVE PROGRAM.
ENDCASE.
CATCH cx_sql_exception cx_abap_not_in_whitelist INTO DATA(err).
cl_demo_output=>display( err->get_text( ) ).
ENDTRY.
SELECT SINGLE price FROM sflight INTO price_after.
IF price_after - price_before = incprice.
cl_demo_output=>display( `Price increased succesfully` ).
ENDIF.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
demo=>main( ).
Description
Using the method EXECUTE_PROCEDURE of the CL_SQL_STATEMENT class, the procedure increase_price defined in the same program with the method EXECUTE_DDL is called. This increases all the flight prices in the table SFLIGHT in the current client by the value contained in the parameter incprice.
This procedure must be implemented specially for each database. The databases in this example are the SAP HANA database, MaxDB, and Oracle. This example program can only be executed for these databases.
The example SAP HANA, Database Procedure Call demonstrates how the procedure created on the SAP-HANA database is called using the statement CALL DATABASE PROCEDURE.