方法1:使用函数EM_GET_NUMBER_OF_ENTRIES

这个函数使用起来很简单,只需要将想查询的数据库表名称维护进输入参数IT_TABLES:

上图说明这个函数支持批量操作,我查询的两张表名为TADIR和PROGDIR.

执行函数,得到表的条目数:

方法2:使用ADBC

方法1的实现其实没有什么神奇之处,就是用Open SQL SELECT COUNT(*)来取得一张表的数据个数。

如果我们使用的ABAP Netweaver底层数据库用的是SAP HANA,那么有一张元数据表M_TABLES,存放了所有表的元数据。

看个例子:

下面一条SQL语句,可以轻松获得表COMM_PRODUCT和TADIR的条目数:

SELECT * FROM M_TABLES WHERE TABLE_NAME IN ('COMM_PRODUCT', 'TADIR')

M_TABLES这张表的详细信息可以查看SAP帮助:https://help.sap.com/doc/4fe29514fd584807ac9f2a04f6754767/2.0.01/en-US/20c7689a75191014ad52c1beb40ce2d2.html

我写了个简单的ABAP工具,把对表M_TABLES的操作封装了起来:

class CL_CRM_HOME_TABLE_SIZE_TOOL definition

public

final

create public .

public section.

TYPES: BEGIN OF ty_size,

table_name TYPE char256,

record_count TYPE int4,

table_size TYPE int4,

END OF ty_size.

TYPES: tt_size TYPE TABLE OF ty_size with key table_name.

class-methods GET_SIZE

importing

!IT_INPUT type STRING_TABLE

returning

value(RT_RESULT) type tt_size .

protected section.

private section.

ENDCLASS.

CLASS CL_CRM_HOME_TABLE_SIZE_TOOL IMPLEMENTATION.

METHOD get_size.

DATA(lv_in) = REDUCE string( INIT x TYPE string FOR <data> IN it_input NEXT x = SWITCH #( x

WHEN space THEN |'{ <data> }'| ELSE x && ',' && |'{ <data> }'| ) ).

TRY.

DATA(lo_sql_con) = cl_sql_connection=>get_connection( ).

DATA(lo_stmt) = lo_sql_con->create_statement( ).

DATA: lv_stmt TYPE string.

lv_stmt = |select table_name, record_count, table_size from m_tables where table_name in ({ lv_in })|.

DATA(lo_res) = lo_stmt->execute_query( lv_stmt ).

GET REFERENCE OF rt_result INTO DATA(lr_data).

lo_res->set_param_table( lr_data ).

lo_res->next_package( ).

lo_res->close( ).

CATCH cx_sql_exception INTO DATA(cx_root).

WRITE:/ 'Error:', cx_root->get_text( ).

RETURN.

ENDTRY.

ENDMETHOD.

ENDCLASS.

上述class的消费方式:

REPORT zsize.

DATA: lt_input TYPE String_table.

lt_input = VALUE #( ( CONV string( 'TADIR' ) )

( CONV string( 'TFDIR' ) )

).

DATA(lt_size) = cl_crm_home_table_size_tool=>get_size( lt_input ).

cl_demo_output=>display_data( lt_size ).

执行上述report,显示的结果如下:

本文提到的工具的源代码请在我的SAP社区博客下载.

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

在ABAP里取得一个数据库表记录数的两种方法的更多相关文章

  1. Atitit.mssql 数据库表记录数and 表体积大小统计

    Atitit.mssql 数据库表记录数and 表体积大小统计 1. EXEC   sp_MSforeachtable   "EXECUTE   sp_spaceused   '?'&quo ...

  2. oracle多表关联删除的两种方法

    oracle多表关联删除的两种方法 第一种使用exists方法 delete from tableA where exits ( select 1 from tableB Where tableA.i ...

  3. MySQL数据库远程访问权限如何打开(两种方法)

    在我们使用mysql数据库时,有时我们的程序与数据库不在同一机器上,这时我们需要远程访问数据库.缺省状态下,mysql的用户没有远程访问的权限. 下面介绍两种方法,解决这一问题. 1.改表法 可能是你 ...

  4. js阻止表单提交的两种方法

    下面直接看代码. <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  5. Navicat premium查看数据库表中文注释的两种方式

    有时候我需要查看数据库表中文注释,来确定每个表存的是哪个模块的数据,确保测试时对数据库查询操作无误. 这个操作我忘记了,此处做一个记录 方式一:通过sql语句来,前提是你知道是哪个表,这种方式不容易改 ...

  6. (转)将access数据库迁移到SQLserver的两种方法

    在实际项目使用中遇到的问题,将原文整理后以备后用. 原文地址(具体链接几次未知):http://www.jb51.net/article/41956.htm 方法1 使用ACCESS2007自带的数据 ...

  7. HTML中禁用表中控件的两种方法与区别

    在网页的制作过程中,我们会经常使用到表单.但是有时候我们会希望表单上的控件是不可修改的,比如在修改密码的网页中,显示用户名的文本框就应该是不可修改状态的. 在html中有两种禁用的方法,他们分别是: ...

  8. ace+validate表单验证(两种方法)

    //修改密码(直接在validate中验证提交) $("#changePassword").on(ace.click_event, function() { var html = ...

  9. 通过ResultSet获取到rs的记录数的几种方法

    方法一:利用ResultSet的getRow方法来获得ResultSet的总行数 ResultSet rs = ps.executeQuery(sql); rs.last(); //移到最后一行 in ...

随机推荐

  1. 南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 I

    链接:https://www.nowcoder.com/acm/contest/122/I来源:牛客网 题目描述 小q最近在做一个项目,其中涉及到了一个计时器的使用,但是笨笨的小q却犯难了,他想请你帮 ...

  2. HDU1085 Holding Bin-Laden Captive!

    Description We all know that Bin-Laden is a notorious terrorist, and he has disappeared for a long t ...

  3. PHP HTTP的PUT,DELETE的使用

    GET操作是安全的.所谓安全是指不管进行多少次操作,资源的状态都不会改变.比如我用GET浏览文章,不管 浏览多少次,那篇文章还在那,没有变化.当然,你可能说每浏览一次文章,文章的浏览数就加一,这不也改 ...

  4. java消息中间件

    消息中间件介绍   消息队列 什么是消息队列 消息队列是消息中间件的一种实现方式. 什么是消息中间件? 将消息中间件需要理解一下什么是消息和中间件? 消息 消息是指软件对象之间进行交互作用和通讯利用的 ...

  5. U盘中病毒了

    往U盘里拷东西的时候突然发现一个后缀名为exe图标却是文件夹的图标的文件.大概二三百K 按类型排序之后发现好几个这样的文件,大小都是一模一样的,名字分别跟我U盘里原先的文件夹对应,原本的文件夹都被设置 ...

  6. Autel MaxiSYS Pro Diagnostic System

    The Autel Maxisys Pro Diagnostic System is a complete OEM-level diagnostic system that enables the s ...

  7. IHttpAsyncHandler IHttpHandler

    1.建立 .ashx 文件 2.异步HTTPHandler的实现https://www.cnblogs.com/HQFZ/p/5688759.html 3.Asp.net异步IHttpAsyncHan ...

  8. shiro【filter】

    alt+7 OncePerRequestFilter public final void doFilter(ServletRequest request, ServletResponse respon ...

  9. IOS Intro - Property Synthesis

    http://www.thecodecrate.com/ios/objective-c/objective-c-property-synthesize/ 01. atomic              ...

  10. g++ 出现 undefined reference to ......

    g++ 出现 undefined reference to ...... 检查/usr/local/lib  /usr/lib 发现已经存在相应的库文件 那么,问题可能出现在g++链接次序上,即先链接 ...