728x90
반응형
쿼리 분기 처리
1. CASE 문을 활용한 조건 분기 (쿼리 내에서 IF 대체)
HANA SQL에서는 IF 문 자체는 쿼리에서 직접 쓸 수 없다. 대신 CASE WHEN ... THEN 문을 사용해 IF처럼 조건 분기 처리를 할 수 있다.
▶ 예시: 조건에 따라 WHERE 절 필터 다르게 적용
SELECT *
FROM MY_TABLE
WHERE
CASE
WHEN :condition = 'A' THEN COLUMN1
WHEN :condition = 'B' THEN COLUMN2
ELSE COLUMN3
END = 'SomeValue';
- :condition은 입력 파라미터 (변수처럼 사용 가능)
- 조건값에 따라 필터링 컬럼을 다르게 적용
2. SQLScript 내에서 IF 사용 (Procedure/Function 내부)
만약 쿼리가 아닌 Stored Procedure나 Calculation View (Scripted) 내에서는 IF 문 사용이 가능하다.
▶ 예: SQLScript 내 조건 분기
IF input_param = 'A' THEN
SELECT * FROM MY_TABLE WHERE COLUMN1 = 'X';
ELSE
SELECT * FROM MY_TABLE WHERE COLUMN2 = 'Y';
END IF;
- 단, 이건 SQLScript (BEGIN … END) 블록 내부에서만 가능
- 일반 쿼리 콘솔에서는 불가능
3. Dynamic SQL 방식 (고급)
SQL을 동적으로 구성해서 실행하는 방식도 있다. (Stored Procedure 내에서 주로 사용)
DECLARE lv_sql NVARCHAR(1000);
IF :param = 'A' THEN
lv_sql := 'SELECT * FROM MY_TABLE WHERE COLUMN1 = 'X';
ELSE
lv_sql := 'SELECT * FROM MY_TABLE WHERE COLUMN2 = 'Y';
END IF;
EXECUTE IMMEDIATE :lv_sql;
구분 | 분기 처리 가능 여부 | 사용 방법 |
일반 SELECT 쿼리 | 직접 IF 사용 불가 | CASE WHEN 사용 |
SQLScript | IF 가능 | IF ... THEN 문법 |
동적 쿼리 구성 | 가능 | EXECUTE IMMEDIATE |
특정 조건일 때만 WHERE절을 적용하고, 조건에 맞지 않으면 WHERE절 자체를 무시하고 전체 데이터 가져오는 패턴
1. 조건을 WHERE절 내부에서 컨트롤
SELECT *
FROM MY_TABLE
WHERE
(:use_filter = 'Y' AND STATUS = 'ACTIVE')
OR
(:use_filter <> 'Y');
- :use_filter 는 외부에서 넘기는 파라미터 (예: ‘Y’ or ‘N’)
- use_filter = 'Y' → STATUS = 'ACTIVE' 필터가 적용됨
- use_filter ≠ 'Y' → WHERE절 전체가 TRUE가 되어 모든 행이 조회됨
실제 업무 예제
SELECT *
FROM EMPLOYEES
WHERE
(:filter_dept = 'Y' AND DEPT_ID = 'D100')
OR
(:filter_dept = 'N');
- filter_dept = 'Y' → 부서 필터링
- filter_dept = 'N' → 전체 부서 조회
특정 조건에 맞을 때만 AND 조건을 추가하고, 아니면 무시하는 패턴
1. AND 조건을 특정 상황일 때만 적용
SELECT *
FROM MY_TABLE
WHERE 1=1
AND (:use_filter = 'N' OR STATUS = 'ACTIVE')
AND (:use_date_filter = 'N' OR CREATED_AT >= '2024-01-01')
▶ 동작 설명:
조건 파라미터 | 값 | 효과 |
:use_filter = 'Y' | STATUS = 'ACTIVE' 적용됨 | AND 조건 포함됨 |
:use_filter = 'N' | 무조건 TRUE → 필터 미적용 | 조건 생략된 것과 같음 |
즉, AND (:param = 'N' OR 조건) 형태로 쓰면
- 파라미터가 Y일 때 → 조건 적용
- 파라미터가 N일 때 → OR TRUE가 되어 전체 허용
실제 업무 예제
SELECT *
FROM SALES_ORDERS
WHERE 1=1
AND (:filter_customer = 'N' OR CUSTOMER_ID = 'C123')
AND (:filter_date = 'N' OR ORDER_DATE >= '2024-01-01')
AND (:filter_status = 'N' OR STATUS = 'OPEN');
→ 파라미터 세팅 예시:
필드 | 값 | 적용되는 조건 |
filter_customer | 'Y' | CUSTOMER_ID = ‘C123’ |
filter_date | 'N' | 전체 날짜 허용 (필터 미적용) |
filter_status | 'Y' | STATUS = ‘OPEN’ |
728x90
반응형
'SAP' 카테고리의 다른 글
[SAP] SAP JCo(SAP Java Connector) (1) | 2025.04.13 |
---|---|
[SAP] SAP Calculation View (0) | 2025.04.12 |
[SAP] SAP ABAP 날짜 관련 함수(function) (0) | 2024.01.25 |
[SAP] SAP ABAP으로 Excel 열을 텍스트로 형식 지정 (0) | 2024.01.22 |
[SAP] SAP Session 메모리 관리 (0) | 2024.01.21 |