This piece of ABAP code should run through multiple tables and run a COUNT in all of them.
Your first query will only keep 1 value for &lt;fs_curr_tab&gt;-table_description so you might as well go for 

  SELECT SINGLE ddtext AS table_description
  FROM dd02t
  INTO &lt;fs_curr_tab&gt;-table_description
  WHERE tabname = &lt;fs_curr_tab&gt;-table_id AND ddlanguage = 'EN'.


The AS table_description is not needed since you are not using CORRESPONDING, I also do not like the hardcoded language, I would take the user language. I also prefer EQ over =

  SELECT SINGLE ddtext
  FROM dd02t
  INTO &lt;fs_curr_tab&gt;-table_description
  WHERE tabname EQ &lt;fs_curr_tab&gt;-table_id 
    AND ddlanguage EQ sy-langu.


If this is called with a large amount of tables (say over 50), then you should definitely consider reading all the table names at once with FOR ALL ENTRIES IN before the loop.

Finally, this could go horribly wrong if that table does not have an 'ID' column. If it were me I would check first the DD03L table to make sure the table does have an ID column. If I am not mistaken, DBIF_RSQL_INVALID_REQUEST is a non-catchable exception and would send the program straight into an abend.