Jonathan Benn
Jonathan Benn

Reputation: 3589

How to get the row count via ADBC native SQL?

I can do the following query using Open SQL:

select count(*) into lv_count
from prcd_elements client specified 
where waerk = 'USD'

How do I do the same thing with ABAP Database Connectivity (ADBC) native SQL?

I've tried the following but it gives me an exception... I'm not sure what data type I need for lt_table to hold a count, and class CL_SQL_RESULT_SET (returned by execute_query) seems to require a local table.

data lt_table type standard table of prcd_elements.

data(lo_sql) = new cl_sql_statement( ).
data(lo_result) = lo_sql->execute_query(
  |select count(*) from prcd_elements where waerk = 'USD'|
).
lo_result->set_param_table( REF #( lt_table ) ).
lo_result->next_package( ).
lo_result->close( ).

Thanks!

Upvotes: 3

Views: 3850

Answers (2)

user1976822
user1976822

Reputation: 1

You can also use a variable instead of a internal table;

data lv_count type i.

data(lo_sql) = new cl_sql_statement( ).
lo_sql->execute_query(select count(*) into :lv_count from prcd_elements where waerk = 'USD').

Upvotes: -1

Jonathan Benn
Jonathan Benn

Reputation: 3589

With some help from a few mysterious benefactors, I figured this one out. I needed to create an internal table with a single column of type I (Integer), and then extract the count from this internal table.

types:
  begin of s_count,
    count type i,
  end of s_count.

data lt_table type standard table of s_count.

data(lo_sql) = new cl_sql_statement( ).
data(lo_result) = lo_sql->execute_query(
  |select count(*) from prcd_elements where waerk = 'USD'|
).
lo_result->set_param_table( REF #( lt_table ) ).
lo_result->next_package( ).
lo_result->close( ).

data(lv_count) = lt_table[ 1 ]-count.

Upvotes: 3

Related Questions