SAP HANA SQL 스크립트 튜토리얼: 구문 및 예제
⚡ 스마트 요약
SQL 스크립트 SAP HANA는 함수형 및 절차적 구문을 통해 표준 SQL을 확장합니다. 이를 통해 저장 프로시저와 사용자 정의 함수를 지원하며, 데이터 집약적인 로직을 애플리케이션 서버에서 데이터베이스로 옮깁니다.

SQL 스크립트란 무엇입니까?
SQL 스크립트는 SQL에 대한 확장 모음입니다. 일반 SQL 대신 저장 프로시저에서 사용할 수 있습니다. 기능적 및 절차적 확장을 결정합니다.
In SQL 스크립트 사용자는 저장 프로시저를 만드는 데 주로 사용되는 구조와 테이블에 대한 로컬 변수를 정의할 수 있습니다.
SQL 스크립트는 계산 보기에서도 사용할 수 있습니다. SQL 스크립트에는 두 가지 서로 다른 논리 컨테이너가 있습니다.
- 절차(절차를 사용하면 입력 및 데이터베이스 테이블로 전달된 데이터에 대한 일련의 데이터 변환을 설명할 수 있습니다.)
- 사용자 정의 함수(사용자 정의 함수 컨테이너는 스칼라 사용자 정의 함수와 테이블 사용자 정의 함수로 구분됩니다).
SQL 스크립트 언어 요소는 아래와 같습니다.
선언적 SQL 스크립트 논리(기능 확장)
- 데이터베이스 테이블을 참조하지 않고도 테이블 유형을 정의할 수 있습니다.
- SELECT와 같은 일반적인 명령문입니다.
- 계산 엔진(CE) 기능.
⚠️ 버전 참고: 계산 엔진 계획 연산자, 즉 CE_COLUMN_TABLE 및 CE_JOIN과 같은 CE_ 함수는 더 이상 사용되지 않습니다. SAP새로운 개발에서는 최적화 프로그램이 최소한 동일한 수준으로 처리하는 표준 SQL 문을 사용해야 합니다. 기존 CE 코드는 계속 실행되지만, 프로시저가 다음에 변경될 때 마이그레이션해야 합니다.
오케스트레이션 SQL 스크립트 논리(기능 확장)
오케스트레이션 논리는 DDL, DML 및 SQL 쿼리 문을 사용하여 데이터 흐름을 구현하고 루프 및 조건과 같은 명령형 언어 구성을 사용하여 흐름 제어 논리를 구현하는 데 사용됩니다.
- 데이터 정의 언어 설명. 예: 스키마 생성.
- 데이터 조작 언어(예: 삽입).
명령형 SQL 스크립트 논리(절차적 확장)
명령형 논리는 논리를 여러 데이터 흐름으로 분할합니다. 예: IF, ELSEIF, ELSE, CASE, FOR(루프) 및 예외.
SQL 스크립트의 중요성
오직 SQL 스크립트만이 데이터 집약적 논리나 애플리케이션 서버의 작업을 데이터베이스 서버로 마이그레이션하는 데 필요한 요소를 제공합니다.
SQL 스크립트의 핵심
- SQL 스크립트는 HANA 데이터베이스 내의 계산 엔진에서 실행되고 처리됩니다.
- SQL 스크립트는 복잡한 계산을 수행할 수 있습니다.
- SQL 스크립트에서는 임시 결과를 보관하기 위해 지역 변수를 선언할 수 있습니다.
- SQL Script Procedure는 “OUTPUT Parameter”를 사용하여 더 많은 결과를 반환할 수 있지만 일반 SQL Procedure는 하나만 반환할 수 있습니다.
- SQL 스크립트에서는 매개변수로 사용할 수 있는 전역 또는 로컬 테이블 유형을 정의할 수 있습니다.
SQL Script를 사용하면 병렬 처리 모드를 구현할 수 있습니다.
SQL 스크립트 프로시저 예제
프로시저는 가장 일반적인 컨테이너입니다. 아래 예제는 직원 데이터를 읽고 필터링한 후 출력 테이블 매개변수를 통해 결과를 반환합니다.
CREATE PROCEDURE DHK_SCHEMA.GET_HIGH_EARNERS ( IN im_min_salary DECIMAL(15,2), OUT ex_employees TABLE (EMP_NAME NVARCHAR(100), SALARY DECIMAL(15,2)), OUT ex_row_count INTEGER ) LANGUAGE SQLSCRIPT READS SQL DATA AS BEGIN -- Declarative logic: a table variable, not a physical table lt_all = SELECT EMP_NAME, SALARY FROM DHK_SCHEMA.EMPLOYEE WHERE SALARY >= :im_min_salary; -- Imperative logic: branch on the result SELECT COUNT(*) INTO ex_row_count FROM :lt_all; IF :ex_row_count = 0 THEN ex_employees = SELECT '' AS EMP_NAME, 0 AS SALARY FROM DUMMY WHERE 1 = 0; ELSE ex_employees = SELECT * FROM :lt_all ORDER BY SALARY DESC; END IF; END;
세 가지 관례를 주목할 필요가 있습니다. 변수를 읽을 때는 항상 콜론(:)을 앞에 붙입니다. :lt_all 테이블 변수를 읽는 동안 lt_all 왼쪽에 있는 것은 해당 객체에 값을 할당합니다. `READS SQL DATA`는 옵티마이저에게 해당 프로시저에 부작용이 없음을 알려주어 보다 적극적인 병렬화를 가능하게 합니다. 그리고 여러 출력 매개변수를 반환하는 프로시저는 일반 SQL에는 없는 기능입니다.
전화하는 방법은 간단합니다.
CALL DHK_SCHEMA.GET_HIGH_EARNERS (50000, ?, ?);
스칼라 및 테이블 사용자 정의 함수
프로시저는 작업을 수행하는 반면, 함수는 값을 반환하며 쿼리 내에서 사용할 수 있습니다. SQL Script는 두 가지 형식을 제공하며, 이 둘은 서로 호환되지 않습니다.
| 매개 변수 | 스칼라 UDF | 테이블 UDF |
|---|---|---|
| 반품 | 단일 값 | 결과 집합 |
| 에 사용 | SELECT 리스트, WHERE 절, 표현식 | FROM 절은 표와 같습니다. |
| 데이터를 수정할 수 있습니다 | 아니 | 아니 |
| 일반적인 사용 | 세율과 같은 재사용 가능한 계산 | 매개변수화된 뷰에서 필터링된 행을 반환합니다. |
-- Scalar function: returns one value CREATE FUNCTION DHK_SCHEMA.ADD_BONUS (im_salary DECIMAL(15,2)) RETURNS total DECIMAL(15,2) LANGUAGE SQLSCRIPT AS BEGIN total := :im_salary * 1.10; END; SELECT EMP_NAME, DHK_SCHEMA.ADD_BONUS(SALARY) AS WITH_BONUS FROM DHK_SCHEMA.EMPLOYEE;
테이블 함수는 `RETURNS TABLE`로 정의되고 `FROM` 절에서 쿼리되므로, 재사용 가능한 매개변수화된 데이터 세트를 구축하는 자연스러운 방법입니다. 계산 보기 또는 보고서가 소비할 수 있습니다.
SQL 스크립트 최고의 사례
SQL 스크립트는 엔진이 병렬 처리할 수 있도록 작성하면 성능이 향상되지만, 애플리케이션 코드처럼 작성하면 성능이 저하됩니다. 여섯 가지 습관이 이러한 차이를 만듭니다.
- 명령형보다는 서술형을 선호하세요. 단일 집합 연산 명령은 행을 하나씩 처리하는 반복문보다 성능이 훨씬 뛰어난 경우가 많습니다. 논리를 집합 연산으로 표현할 수 없는 경우에만 FOR 반복문을 사용하십시오.
- 커서를 사용하지 마세요. 이들은 행 단위 처리를 강제하여 계산 엔진을 완전히 무력화시킵니다. 거의 모든 커서는 조인이나 집계로 다시 작성할 수 있습니다.
- 각 진술은 독립적으로 유지하십시오. 서로 참조하지 않는 두 테이블 변수가 병렬로 계산됩니다. 각 단계를 이전 단계로 연결하면 전체 절차가 직렬화됩니다.
- READS SQL DATA를 true로 선언합니다. 이는 해당 시술에 부작용이 없음을 의미하며, 이를 통해 더욱 최적화할 수 있습니다.
- 가능한 한 빨리 필터링하세요. 첫 번째 테이블 변수의 행 수를 줄이면 이후의 모든 데이터가 축소되는 반면, 마지막 단계에서 필터링을 수행하면 이미 그에 따른 비용이 발생합니다.
- CE_ 함수 사용을 중단하십시오. 이러한 기능은 더 이상 사용되지 않으며, 하나의 문장에서 SQL과 자유롭게 혼합하여 사용할 수 없으며, SQL 최적화 프로그램이 이제 동일한 작업을 더 효율적으로 처리합니다.
문장 수준 구문은 다음에서 다룹니다. SAP 하나SQL프로시저 내에서 사용 가능한 함수들 SAP HANA SQL 함수그리고 이러한 절차를 사용하는 모델링 객체는 다음과 같습니다. SAP HANA 모델링 튜토리얼.
