在ABAP里取得一个数据库表记录数的两种方法
2018-10-22 18:27
309 查看
方法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的原创文章,请关注公众号"汪子熙":
相关文章推荐
- PHP查询数据库中满足条件的记录条数(两种实现方法)
- TabHost 两种使用方法 直接让一个Activity 继承TabActivity 和 利用findViwById()方法取得TagHost组件
- TabHost 两种使用方法 直接让一个Activity 继承TabActivity 和 利用findViwById()方法取得TagHost组件
- 一次向数据库中插入多条相同记录的SQL方法(只有一个列不同)
- PHP查询数据库中满足条件的记录条数(两种实现方法)
- C#中从数据库查询记录的方法分类( 一般使用两种方法):
- 用工厂模式写了一个数据库访问类库,但是对于数据库连接字符串和数据库类型有两种方法,不知道哪种好,大家看看了,附类关系图
- 数据库的读取一条和多条记录的查询的两种方法
- PHP查询数据库中满足条件的记录条数(两种实现方法)
- asp.net得到本机数据库实例的两种方法代码
- 1.创建一个Rectangle类,添加width和height两个成员变量。 2.在Rectangle中添加两种方法分别计算矩形的周长和面积 3.编程利用Rectangle输出一个矩形的周
- asp.net得到本机数据库实例的两种方法代码
- 查询数据库中触发器的两种方法
- java连接数据库的两种方法总结
- 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决
- 两种方法对一个数进行质因子式分解
- 设置数据库兼容级别的两种方法
- 保存(Access)数据库连接字符串的两种方法web.config
- 公布一个简单的日志记录方法
- dede数据库不在同一个服务器,数据调用方法!