当前位置: 首页 > news >正文

在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的原创文章,请关注公众号"汪子熙"。

相关文章:

  • 【Unity Shader】Shader基础
  • vue项目使用微信公众号支付
  • 你连这10个工具都不知道,还是程序员?
  • DDL语言
  • BZOJ 1568: [JSOI2008]Blue Mary开公司
  • Ubuntu 16.04 下 安装go
  • PHP CLI应用的调试原理
  • springboot入门_email
  • Python MetaClass深入分析
  • Python中常见的字符串的操作方法:
  • 记录LNMP多主机架构Wordpress博客实施过程中的一些坑
  • 表单提交时问题总结
  • iOS:The operation couldn’t be completed. (DVTCoreSimulatorAdditionsErrorDomain error 0.)
  • python关于标识符说明
  • 类的自动加载
  • “大数据应用场景”之隔壁老王(连载四)
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • angular2 简述
  • echarts的各种常用效果展示
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Fastjson的基本使用方法大全
  • HomeBrew常规使用教程
  • Java精华积累:初学者都应该搞懂的问题
  • js面向对象
  • python3 使用 asyncio 代替线程
  • uni-app项目数字滚动
  • vue-cli3搭建项目
  • 基于Android乐音识别(2)
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 每天一个设计模式之命令模式
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • # Panda3d 碰撞检测系统介绍
  • #WEB前端(HTML属性)
  • #在 README.md 中生成项目目录结构
  • (C#)一个最简单的链表类
  • (JS基础)String 类型
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (论文阅读30/100)Convolutional Pose Machines
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .mysql secret在哪_MySQL如何使用索引
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET的微型Web框架 Nancy
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • /bin、/sbin、/usr/bin、/usr/sbin
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试
  • [C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改