HANA 저장 프로 시저의 입력 매개 변수에서 필드를 사용하여 execute_immediate 문에 대한 테이블 이름을 동적으로 생성하는 방법은 무엇입니까?

아비 섹 하즈 라

AMDP에서 저장 프로 시저로 개체 이름, 고객 및 위치의 3 개 필드를 포함하는 테이블을 전달해야하는 운이없는 요구 사항을 해결하려고 노력했습니다. 저장 프로시 저는 동일한 고객, 위치 및 최소 (날짜)를 저장하는 테이블을 반환하는 데 사용해야합니다.

min (date)은 다음과 같이 객체 이름에서 파생 된 테이블에서 찾을 수 '"/BIC/A' || (object name passed from AMDP) || 2"'있습니다. 따라서 AMDP가 매개 변수 객체를로 전달 YCUSTM01하면 최소 날짜를 찾을 테이블 이름은 "/BIC/AYCUSTM012". 따라서 특정 위치에있는 고객의 최소 날짜를 찾기 위해 execute_immediate 문 (아마도?)을 만들고 추가 계산을 위해 해당 테이블을 AMDP에 다시 반환 할 수 있어야합니다.

입력 테이블 :

| Object_name | Customer | Location |
+-------------+----------+----------+
| YCUSTM01    | Walgreen | Chicago  |

샘플 데이터 "/BIC/AYCUSTM012":

| Customer | Location | Date       |
+----------+----------+------------+
| Walgreen | Chicago  | 24.09.2020 |
| Walgreen | Chicago  | 07.02.2019 |
| Walgreen | Chicago  | 12.12.2012 |
| Walgreen | Chicago  | 01.04.2015 |

저장 프로 시저에서 원하는 출력 테이블 :

  select
    customer,
    location,
    min(calday)
  from "/BIC/AYCUSTM012"
  where customer = :customer
    and location = :location
  group by
    customer,
    location;

  | Customer | Location | Min_date   |
  +----------+----------+------------+
  | Walgreen | Chicago  | 12.12.2012 |

어떤 단서라도 대단히 감사하겠습니다.

Lars Br.

astentx 는 매우 옳습니다. 코드에서 SAP BW ADSO 테이블에 직접 액세스하는 것은 최선의 방법이 아닙니다. 대신 이러한 ADSO 개체 외부보기사용하는 것이 좋습니다.

그러나 이것은 동적 SQL 접근 방식의 주요 문제가 아닙니다. 다시, astentx는 동적 SQL을 사용하는 것이 좋은 생각이 아닌 이유에 대한 포괄적 인 개요를 이미 제공 했으므로 다시 반복하지 않겠습니다.

내가 권장하는 솔루션 접근 방식은 몇 단계를 더 거쳐 데이터 선택 및 데이터 처리 / 쿼리 계산을위한 코드를 분리합니다.

데모를 포함한 전체 접근 방식은 여기에 설명되어 있습니다. Lars Breddemann 블로그 : 비즈니스 로직을 테이블에서 분리하고 동적 SQL을 피 하십시오. 여기에 대략적인 개요가 있습니다.

  • 특정 테이블 대신 적절한 테이블 유형 에서 원하는 계산을 수행하는 테이블 함수 생성
  • 로직을 사용하려는 각 테이블에 대해 테이블 에서 선택 하고 테이블 함수 테이블 유형 과 일치하도록 변환 하는 상용구 코드를 작성 하십시오.
  • 이제 상용구 코드 만 물리적 테이블 (어딘가에 테이블에 대한 매개 변수를 입력해야하므로 어쨌든 가져야하는 것)에 의존하며 계산 / 비즈니스 로직은 물리적 테이블과 독립적입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관