在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')
我寫了個簡單的ABAP工具,把對錶M_TABLES的操作封裝了起來:
class CL_CRM_HOME_TABLE_SIZE_TOOL definitionpublic 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_SIZEimporting !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 #( xWHEN 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的原創文章,請關注公眾號"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2217157/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server在分頁獲取資料的同時獲取到總記錄數的兩種方法SQLServer
- SAP ABAP裡資料庫表的Storage Parameters從哪裡來的資料庫
- sqlserver查詢一個庫所有表的記錄數SQLServer
- MySQL建立資料庫的兩種方法MySql資料庫
- efcore 跨表查詢,實現一個介面內查詢兩個不同資料庫裡各自的表資料資料庫
- 兩個小例子:把從表中取得的資料傳給Unix的shell變數變數
- 顯示資料庫中所有表的記錄數資料庫
- 交換兩個資料的三種方法
- 比較兩個mysql資料庫裡面的表是否相同的一個校驗指令碼MySql資料庫指令碼
- 如何把 SAP ABAP 系統裡一張資料庫表的內容,顯示在 Adobe PDF Form 裡資料庫ORM
- 兩種簡單分析和優化MySQL資料庫表的方法優化MySql資料庫
- 在一個資料庫中模擬兩個資料庫(每個資料庫中使用者都建立表的同義詞)資料庫
- 計算資料庫中所有表的記錄條數資料庫
- ABAP資料庫表的後設資料資料庫
- 在ABAP Webdynpro裡顯示PDF的一種辦法Web
- MongoDB資料庫的兩種正確停庫方法MongoDB資料庫
- 一種獲取SAP HANA資料庫表條目數的另類方法資料庫
- zabbix 監控資料庫表記錄數(Discovery方式)資料庫
- ASP建立SQL Server資料庫的兩種方法SQLServer資料庫
- Oracle查詢資料庫中所有表和分割槽表的記錄數Oracle資料庫
- oracle 資料庫兩種引數檔案Oracle資料庫
- SAP ABAP 系統進行資料庫表查詢的幾種常用方法的試讀版資料庫
- Java連線oracle資料庫的兩種常用方法JavaOracle資料庫
- 利用ABAP除錯模式修改SE16裡資料庫表的內容除錯模式資料庫
- PHP查詢資料庫中滿足條件的記錄條數(二種實現方法)PHP資料庫
- 一個新上線資料庫的調優記錄資料庫
- ABAP和XML資料格式互相轉換的兩種方式XML
- 各個資料庫的取一表前N條記錄不同SQL寫法資料庫SQL
- 教你兩種資料庫覆蓋式資料匯入方法資料庫
- Dedecms資料庫恢復與備份的兩種方法資料庫
- 在SAP HANA Express Edition裡建立資料庫表Express資料庫
- [ChatGPT 勘誤]:SAP ABAP 系統裡資料庫表 dlv_systc 的用途ChatGPT資料庫
- SAP ABAP 的兩種記憶體物件型別記憶體物件型別
- 在儲存過程中建立表的兩種方法儲存過程
- mysql資料庫連表查詢的幾種方法MySql資料庫
- 在兩個資料庫之間進行資料同步資料庫
- SQL Server資料庫日誌清除的兩個方法SQLServer資料庫
- SAP ABAP 字串內數字去前導零的兩種方法(正則/拼接)字串