ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AMDP SQLScript — Consumption Entity & Table Function 정리
    SAP 2026. 5. 13. 18:22
    AMDP SQLScript - Consumption Entity & Table Function 정리

    AMDP SQLScript — Consumption Entity & Table Function 정리

    1. SQLScript에서 Consumption Entity 호출 불가

    SQLScript에서 Consumption Entity 호출이 안 되나?

    SQLScript(AMDP)는 HANA DB 엔진 레벨에서 실행되고, Consumption View는 ABAP CDS 런타임 레벨에서 동작하기 때문에 직접 호출이 불가능합니다.

    CDS 레이어SQLScript 호출 가능 여부
    DB Table / View✅ 가능
    CDS Basic / Interface View✅ 가능
    CDS Composite View✅ 가능
    CDS Consumption View❌ 불가
    💡 Consumption View에는 @UI.*, @Consumption.*, Access Control(DCL) 등 ABAP 런타임이 처리하는 메타데이터가 포함되어 있어 HANA 레이어에서 인식하지 못합니다.

    대안

    ① Consumption View 대신 하위 Interface/Composite View 직접 참조

    SELECT * FROM I_SalesOrder  -- C_SalesOrder 대신
    WHERE CompanyCode = '1000';

    ② 기반 투명 테이블 직접 접근

    SELECT vbeln, kunnr FROM vbak WHERE bukrs = '1000';

    ③ AMDP를 Consumption View의 Query Provider로 등록하는 설계 패턴 활용

    2. Consumption View에 Query Provider 등록 가능 여부

    Consumption View에도 Query Provider를 넣을 수 있어?

    기술적으로는 가능하지만 SAP 비권장 패턴입니다.

    ⚠️ Consumption View는 UI Annotation, Access Control 담당 레이어입니다. 여기에 로직까지 섞으면 관심사 분리 원칙이 깨져 유지보수가 어려워집니다.

    권장 레이어 구조

    [ Consumption View ]   ← UI/OData 노출, Annotation 담당
            ↓
    [ Composite View ]     ← ✅ Query Provider 권장 위치
            ↓
    [ Interface View ]     ← ✅ Query Provider 가능
            ↓
    [ AMDP ]

    권장 패턴 코드

    " ✅ Interface View에 Query Provider 등록
    @VDM.viewType: #BASIC
    @ObjectModel.query.implementedBy: 'ABAP:ZCL_MY_QUERY_PROVIDER'
    define view entity I_MyEntity as select from ...
    
    " Consumption View는 노출 담당만
    @VDM.viewType: #CONSUMPTION
    @UI.headerInfo: ...
    define view entity C_MyEntity as select from I_MyEntity

    3. AMDP Table Function 호출 방법

    Table Function 호출 방법은?

    ① ABAP 코드에서 호출

    DATA lt_result TYPE STANDARD TABLE OF zst_result.
    
    zcl_my_amdp=>get_data(
      EXPORTING iv_bukrs = '1000'
      IMPORTING rt_result = lt_result
    ).

    ② 다른 AMDP 내부에서 호출 (AMDP → AMDP)

    METHOD another_amdp
      BY DATABASE FUNCTION FOR HDB
      LANGUAGE SQLSCRIPT OPTIONS READ-ONLY
      USING zcl_my_amdp=>get_data.   -- ← USING에 반드시 선언
    
      lt_data = SELECT * FROM "ZCL_MY_AMDP=>GET_DATA"(iv_bukrs => '1000');
    
      RETURN SELECT * FROM :lt_data;
    ENDMETHOD.

    ③ CDS View에서 호출

    @VDM.viewType: #BASIC
    define view entity I_MyView
      as select from ZCL_MY_AMDP=>GET_DATA(iv_bukrs: '1000')
    {
      vbeln, kunnr, matnr
    }

    핵심 주의사항

    항목내용
    USING다른 AMDP 호출 시 반드시 선언
    함수명 표기SQLScript 내에서 "클래스명=>메서드명" 대문자
    OPTIONS READ-ONLYTable Function은 필수
    Procedure vs FunctionProcedure는 SELECT FROM 불가, Function만 가능
    파라미터 전달함수명(파라미터명 => :변수) 형식

    4. DB02에서 Table Function 미인식 시 체크리스트

    DB02에서 실행 중인데 Table Function을 인식하지 못하면 어디를 확인해야 해?

    체크 순서

    1. SE24에서 클래스 Activate 됐는지 확인 (Ctrl+F3)
            ↓
    2. SYS.FUNCTIONS 테이블에서 Function 존재 확인
            ↓
    3. IS_VALID = TRUE 인지 확인
            ↓
    4. DB02 Schema가 ABAP Schema 맞는지 확인
            ↓
    5. Function명 대문자 여부 확인

    HANA DB에서 Function 존재 확인 SQL

    -- Function 존재 여부 확인
    SELECT SCHEMA_NAME, FUNCTION_NAME, FUNCTION_TYPE, IS_VALID
    FROM SYS.FUNCTIONS
    WHERE FUNCTION_NAME = 'ZCL_MY_AMDP=>GET_DATA';  -- 반드시 대문자

    IS_VALID 상태별 조치

    IS_VALID의미조치
    TRUE정상DB02 Schema 문제 확인
    FALSEFunction 손상ABAP 클래스 재활성화

    현재 Schema 확인

    SELECT CURRENT_SCHEMA FROM DUMMY;
    
    SELECT SCHEMA_NAME FROM SYS.SCHEMAS
    WHERE SCHEMA_NAME LIKE 'SAP%';
    ⚠️ DB02는 기본 Schema가 ABAP Schema와 다를 수 있습니다. Schema를 ABAP Schema로 변경한 후 검색하세요.
    💡 ABAP 측 오류 확인: ST22(덤프), SM21(시스템 로그), SE24에서 F9(직접 실행)로 오류 메시지 확인 가능합니다.
    #AMDP #SQLScript #CDS #ConsumptionView #TableFunction #QueryProvider #SAPHANA #SAPABAP
Designed by Tistory.