在ABAP里取得一个数据库表记录数的两种方法
方法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里取得一个数据库表记录数的两种方法的更多相关文章
- Atitit.mssql 数据库表记录数and 表体积大小统计
Atitit.mssql 数据库表记录数and 表体积大小统计 1. EXEC sp_MSforeachtable "EXECUTE sp_spaceused '?'&quo ...
- oracle多表关联删除的两种方法
oracle多表关联删除的两种方法 第一种使用exists方法 delete from tableA where exits ( select 1 from tableB Where tableA.i ...
- MySQL数据库远程访问权限如何打开(两种方法)
在我们使用mysql数据库时,有时我们的程序与数据库不在同一机器上,这时我们需要远程访问数据库.缺省状态下,mysql的用户没有远程访问的权限. 下面介绍两种方法,解决这一问题. 1.改表法 可能是你 ...
- js阻止表单提交的两种方法
下面直接看代码. <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- Navicat premium查看数据库表中文注释的两种方式
有时候我需要查看数据库表中文注释,来确定每个表存的是哪个模块的数据,确保测试时对数据库查询操作无误. 这个操作我忘记了,此处做一个记录 方式一:通过sql语句来,前提是你知道是哪个表,这种方式不容易改 ...
- (转)将access数据库迁移到SQLserver的两种方法
在实际项目使用中遇到的问题,将原文整理后以备后用. 原文地址(具体链接几次未知):http://www.jb51.net/article/41956.htm 方法1 使用ACCESS2007自带的数据 ...
- HTML中禁用表中控件的两种方法与区别
在网页的制作过程中,我们会经常使用到表单.但是有时候我们会希望表单上的控件是不可修改的,比如在修改密码的网页中,显示用户名的文本框就应该是不可修改状态的. 在html中有两种禁用的方法,他们分别是: ...
- ace+validate表单验证(两种方法)
//修改密码(直接在validate中验证提交) $("#changePassword").on(ace.click_event, function() { var html = ...
- 通过ResultSet获取到rs的记录数的几种方法
方法一:利用ResultSet的getRow方法来获得ResultSet的总行数 ResultSet rs = ps.executeQuery(sql); rs.last(); //移到最后一行 in ...
随机推荐
- 阿里插件检查 lombok报错---方法缺少 '@Override' 注解
问题: Eclipse里,阿里编码规约插件扫描代码出现,但是idea却没有. 解决: 将以上注解改成 @Setter @Getter @NoArgsConstructor @AllArgsConstr ...
- CPU的CAS操作
https://blog.csdn.net/qq_35492857/article/details/78471032 https://www.cnblogs.com/gdjdsjh/p/5076815 ...
- MemoryFile匿名共享内存
Android提供了一个高效的共享内存机制.如果应用中涉及到在多个进程间交换数据时使用Android提高的共享内存机制将会大大的提高效率.但是也许是出于安全考虑,在应用层使用共享内存机制将会遇到很多障 ...
- python + selenium 练习篇 - 定位元素的方法
1.利用ID定位元素(能直接通过ID来定位的元素比较少) # coding=utf-8from selenium import webdriverdriver = webdriver.Chrome() ...
- 明码(C++)
2.明码(结果填空) (满分7分) 注意事项:问题的描述在考生文件夹下对应题号的“题目.txt”中.相关的参考文件在同一目录中.请先阅读题目,不限解决问题的方式,只要求提交结果.必须通过浏览器提交答案 ...
- 当post 的字段很多,post的字段并不完全修改(有的值是前端input的值,有的任保留原来原来数据库的值),
有一种解决方法(ps:from ljq): 把数据库的值先全部遍历出来,然后再对遍历出来值的$key进行一个判断, example: foreach ($results[0] as $key =&g ...
- pat1048. Find Coins (25)
1048. Find Coins (25) 时间限制 50 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Eva loves t ...
- 使用cookie的注意事项
一.什么是cookie? Cookie(复数形态Cookies),中文名称为小型文本文件或小甜饼[1],指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密) ...
- 判断表单中是否含有disabled属性
我想判断input里面是否有disabled.或者选中未选中的selected checked 属性时,需要用 prop() 方法,返回的结果是 true 或 false . attr()这个方 ...
- java实现两个整数相除保留一位小数
//整数相除 保留一位小数 public static String division(int a ,int b){ String result = ""; float num = ...