본문 바로가기

SAP

[SAP ABAP] Table이 DB/DDIC에 존재하는지 체크하는 Function Module

🕑 10분

 

Table명 문자열 변수를 가지고서

Table이 DB에 존재하는지 (SE11에서 조회가 되는 Table인지)

체크하는 Standard Function Module을 살펴보도록 하겠습니다.

 

참고한 SAP Community 글
 

Function module to check the existance of a table

Hi everyboy, is there any function module to check the existance of a table....Thanks... Ram.

community.sap.com

 

구글링 검색 키워드

"ABAP FM to check table existence"

 

 

✅ '테이블이 있다 / 없다' Function Module

1. RPY_EXISTENCE_CHECK_TABL (최종변경일 2022.05.17)

Function Group. SEUEXIST 에서 다양한 Object 종류의 존재 유무를 체크하는 Function Module들을 확인해볼 수 있다.

 

1) SE37 실행 결과

  • sy-subrc = 0 : 테이블 존재
  • sy-subrc = 1 : 테이블 미존재
  • sy-subrc = 2 : 테이블 미존재 + others
  • Structure명도 sy-subrc = 0 으로 나온다.

좌: 존재 / 우: 미존재

 

2) 소스코드 호출

*1. RPY_EXISTENCE_CHECK_TABL (2022.05.17)
CALL FUNCTION 'RPY_EXISTENCE_CHECK_TABL'
 EXPORTING
   NAME            = 'KNA1'
 EXCEPTIONS
   NOT_EXIST       = 1
   OTHERS          = 2.

IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

 

 

2. CHECK_TAB_NAME (최종변경일 2009.06.18)

1) SE37 실행 결과

  • sy-subrc = 0 : 테이블 존재
  • sy-subrc = 1 : 테이블 미존재
  • sy-subrc = 2 : 테이블 미존재 + others
  • Structure명도 sy-subrc = 0 으로 나온다.

좌: 존재 / 우: 미존재

 

2) 소스코드 호출

*2. CHECK_TAB_NAME (2009.06.18)
CALL FUNCTION 'CHECK_TAB_NAME'
  EXPORTING
    i_tabname           = 'KNA1'
 EXCEPTIONS
   TAB_NOT_FOUND       = 1
   OTHERS              = 2.

IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

 

 

3. DB_EXISTS_TABLE (최종변경일 2018.11.26)

📌 저는 함수를 모두 비교한 뒤에, 이 Function Module을 선택하여 개발했습니다.
1) 속도가 가장 느리지만
2) 이 함수만이 Structure를 거르고 진짜 Transport Table만 결과를 성공으로 받을 수 있기때문입니다.

 

1) SE37 실행 결과

  • sy-subrc = 0 : 테이블 존재
  • sy-subrc = 4 : 테이블 미존재
  • Structure명은 sy-subrc = 4 로 나온다.

좌: 존재 / 우: 미존재

 

2) 소스코드 호출

*3. DB_EXISTS_TABLE (2018.11.26)
DATA : lv_subrc TYPE sy-subrc.
CALL FUNCTION 'DB_EXISTS_TABLE'
  EXPORTING
    tabname                      = 'KNA1'
  IMPORTING
    SUBRC                        = lv_subrc.

 

 

4. 함수 속도 비교

 

1. RPY_EXISTENCE_CHECK_TABL (최종변경일 2022.05.17) --> 1.588초
2. CHECK_TAB_NAME (최종변경일 2009.06.18) --> 0.353초
3. DB_EXISTS_TABLE (최종변경일 2018.11.26) --> 1.937초

 

🔽 테스트 가능한 소스코드 전문 🔽

더보기

REPORT ZCHECK_TABLE.

DATAg_time1     TYPE i,
      g_time2     TYPE i,
      g_time_diff TYPE f,
      g_time      TYPE i.

*1. RPY_EXISTENCE_CHECK_TABL (2022.05.17)
PERFORM start_time.
CALL FUNCTION 'RPY_EXISTENCE_CHECK_TABL'
 EXPORTING
   NAME            'KNA1'
 EXCEPTIONS
   NOT_EXIST       1
   OTHERS          2.

IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
PERFORM end_time.

*2. CHECK_TAB_NAME (2009.06.18)
PERFORM start_time.
CALL FUNCTION 'CHECK_TAB_NAME'
  EXPORTING
    i_tabname           ' KNA1 '
 EXCEPTIONS
   TAB_NOT_FOUND       1
   OTHERS              2.

IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
PERFORM end_time.


*3. DB_EXISTS_TABLE (2018.11.26)
PERFORM start_time.
DATA lv_subrc TYPE sy-subrc.
CALL FUNCTION 'DB_EXISTS_TABLE'
  EXPORTING
    tabname                      ' KNA1 '
  IMPORTING
    SUBRC                        lv_subrc.
PERFORM end_time.

*--------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form start_time
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM start_time .
  CLEARg_time1g_time2g_time_diffg_time.
  GET RUN TIME FIELD g_time1.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form end_time
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM end_time .
  GET RUN TIME FIELD g_time2.
  g_time_diff g_time2 g_time1.

  g_time g_time_diff.

  WRITE:'시간 소요 : 'g_time.
ENDFORM.

 

 

✅ '테이블 정보를 출력 한다 / 안 한다' Function Module

1. DDIF_NAMETAB_GET (최종변경일 2022.11.10)

1) SE37 실행 결과

  • sy-subrc = 0 : 테이블 존재
  • 테이블 존재 시, 모든 필드 정보가 출력된다.
  • Structure명도 sy-subrc = 0 으로 나온다.

좌: 존재 / 우: 미존재

 

 

2. DDIF_FIELDINFO_GET (최종변경일 2022.11.10)

1) SE37 실행 결과

  • sy-subrc = 0 : 테이블 존재
  • 테이블 존재 시, 모든 필드 정보가 출력된다.
  • 테이블에 해당 필드가 존재하는지도 확인이 가능하다.
  • Structure명도 sy-subrc = 0 으로 나온다.

좌: 존재 / 우: 미존재

 

 


 

수고하셨습니다.