zoukankan      html  css  js  c++  java
  • 一种获取SAP HANA数据库表条目数的另类方法

    Still used the old way SELECT COUNT(*) to get total number of records stored in a table?
    If you are using HANA database, there is another approach to achieve the same.
    In HANA there is a metadata table m_tables which stores the related information:

    You can find its definition in SAP help.

    You can use the following ABAP code to access this HANA table from ABAP server:

    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.
    

    Consumer report:

    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 ).
    

    Result:

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

  • 相关阅读:
    蜕变过程中的思考
    Django template for 循环用法
    Django 发送html邮件
    Django F对象的使用
    在Django中使用Q()对象
    ubuntu中管理用户和用户组
    Django settings.py 的media路径设置
    Git版本控制 备忘录
    Git .gitignore文件的使用
    将git关联到pycharm
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/13599253.html
Copyright © 2011-2022 走看看