SAP Výukový program pro skripty HANA SQL: Syntaxe a příklady
⚡ Chytré shrnutí
SQL skript v SAP HANA rozšiřuje standardní SQL o funkční a procedurální konstrukty. Pomáhá uložit procedury a uživatelem definované funkce a přesouvá logiku náročnou na data z aplikačního serveru do databáze.

Co je SQL Script?
SQL Script je kolekce rozšíření SQL. Lze jej použít v uložené proceduře místo prostého SQL. Určuje funkční a procedurální rozšíření.
In SQL Uživatel skriptu může definovat lokální proměnné pro strukturu a tabulky, které se primárně používají pro tvorbu uložené procedury.
SQL skript lze také použít v zobrazení Výpočet. Ve skriptu SQL existují dva různé logické kontejnery-
- Procedura (Procedury umožňují popsat sekvenci transformací dat na datech předávaných jako vstupní a databázové tabulky).
- User Defined Function (Kontejner User Defined Function je rozdělen na skalární uživatelem definovanou funkci a tabulku uživatelem definovanou funkci).
Prvky skriptovacího jazyka SQL jsou uvedeny níže –
Deklarativní logika skriptu SQL (funkční rozšíření)
- Umožňuje definici typů tabulek bez odkazování na databázové tabulky.
- Typický příkaz jako SELECTs.
- Funkce výpočetního motoru (CE).
⚠️ Poznámka k verzi: Operátory plánu výpočetního enginu, funkce CE_, jako například CE_COLUMN_TABLE a CE_JOIN, jsou zastaralé. SAPNový vývoj by měl používat standardní SQL příkazy, které optimalizátor zvládá alespoň stejně dobře. Stávající CE kód stále běží, ale měl by být migrován při příští změně procedury.
Orchestration SQL Script Logic (funkční rozšíření)
Orchestrační logika se používá k implementaci toku dat pomocí příkazů DDL, DML a SQL Query a logiky řízení toku pomocí imperativních jazykových konstrukcí, jako jsou smyčky a podmínky.
- Prohlášení jazyka definice dat. Např. Vytvořte schéma.
- Jazyk pro manipulaci s daty (např. Insert).
Imperativní logika skriptu SQL (procedurální rozšíření)
Imperativní logika rozděluje logiku mezi několik datových toků. Např. IF, ELSEIF, ELSE, CASE, FOR (smyčka) a výjimky.
Význam SQL skriptu
Pouze SQL Script poskytuje nezbytné prvky pro migraci datově náročné logiky nebo provozu aplikačního serveru na databázový server.
Klíčové body SQL skriptu
- SQL Script se spouští a zpracovává ve výpočetním enginu v databázi HANA.
- SQL Script je schopen provádět složité výpočty.
- Ve skriptu SQL lze deklarovat lokální proměnnou, která bude obsahovat prozatímní výsledek.
- Procedura skriptu SQL může vrátit více výsledků pomocí „parametru VÝSTUPU“, zatímco normální procedura SQL může vrátit pouze jeden.
- V SQL skriptu můžete definovat globální nebo lokální typy tabulek, které lze použít jako parametry.
Pomocí skriptu SQL lze dosáhnout režimu paralelního zpracování.
Příklad procedury SQL skriptu
Procedura je nejběžnějším kontejnerem. Následující příklad čte data zaměstnanců, filtruje je a vrací výsledek pomocí parametru výstupní tabulky.
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;
Za zmínku stojí tři konvence. Dvojtečka začíná před jakýmkoli čtením proměnné, takže :lt_all čte proměnnou tabulky, zatímco vše vlevo mu přiřazuje. READS SQL DATA říká optimalizátoru, že procedura nemá žádné vedlejší účinky, což umožňuje agresivnější paralelizaci. A procedura vracející několik výstupních parametrů je přesně ta schopnost, kterou prostý SQL postrádá.
Volání je jednoduché:
CALL DHK_SCHEMA.GET_HIGH_EARNERS (50000, ?, ?);
Skalární a tabulkové uživatelsky definované funkce
Pokud procedura provádí akce, funkce vrací hodnotu a lze ji použít v dotazu. SQL skript nabízí dva formáty a ty nejsou zaměnitelné.
| Parametr | Skalární UDF | Tabulka UDF |
|---|---|---|
| Vrácení zboží | Jedna hodnota | Sada výsledků |
| Použito v | Seznam SELECT, klauzule WHERE, výrazy | Klauzule FROM, podobně jako tabulka |
| Může upravovat data | Ne | Ne |
| Typické použití | Opakovaně použitelný výpočet, například daňová sazba | Parametrizované zobrazení vracející filtrované řádky |
-- 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;
Tabulková funkce je definována pomocí RETURNS TABLE a poté je dotazována v klauzuli FROM, což z ní činí přirozený způsob, jak vytvořit opakovaně použitelnou, parametrizovanou datovou sadu, která... zobrazení výpočtu nebo sestava může spotřebovat.
Nejlepší postupy pro SQL skripty
SQL skript funguje dobře, když je napsán tak, aby umožňoval paralelizaci enginu, a špatně, když je napsán jako aplikační kód. Rozdíl spočívá v šesti návycích.
- Upřednostňujte deklarativní způsob před imperativním. Jeden příkaz založený na množině překonává smyčku, která zpracovává řádky jeden po druhém, často o řády. Po smyčce FOR sahejte pouze tehdy, když logiku skutečně nelze vyjádřit jako operaci s množinami.
- Vyhněte se kurzorům. Vynucují zpracování řádek po řádku a zcela ruší výpočetní engine. Téměř každý kurzor lze přepsat jako spojení nebo agregaci.
- Udržujte výroky nezávislé. Dvě proměnné tabulky, které se na sebe navzájem neodkazují, se počítají paralelně. Řetězení každého kroku s předchozím serializuje celou proceduru.
- Deklarujte ČTENÍ SQL DATA, kde je hodnota true. Signalizuje to, že postup nemá žádné vedlejší účinky, což umožňuje větší optimalizaci.
- Filtrujte co nejdříve. Snížení počtu řádků v první proměnné tabulky zmenší vše v následných proměnných, zatímco filtrování na konci již zaplatilo za to.
- Migrujte pryč z funkcí CE_. Jsou zastaralé, nelze je volně kombinovat s SQL v jednom příkazu a optimalizátor SQL nyní zvládá stejnou práci lépe.
Syntaxe na úrovni příkazů je popsána v SAP HANA SQL, funkce dostupné uvnitř procedury v SAP Funkce HANA SQLa modelovací objekty, které tyto procedury spotřebovávají v SAP Modelování HANA výukový program.
