SAP HANA SQL szkript oktatóanyag: Szintaxis és példák
⚡ Okos összefoglaló
SQL szkript SAP A HANA kiterjeszti a standard SQL-t funkcionális és procedurális konstrukciókkal. Tárolt eljárásokat és felhasználó által definiált függvényeket működtet, adatintenzív logikát helyezve át az alkalmazáskiszolgálóról az adatbázisba.

Mi az SQL Script?
Az SQL Script az SQL kiterjesztéseinek gyűjteménye. Tárolt eljárásban használható a sima SQL helyett. Ez határozza meg a funkcionális és eljárási kiterjesztéseket.
In SQL A Script felhasználó helyi változókat definiálhat a struktúrához és a táblákhoz, amelyeket elsősorban a tárolt eljárások létrehozására használnak.
Az SQL-szkript számítási nézetben is használható. Az SQL Scriptben két különböző logikai konténer található:
- Eljárás (Az Eljárások segítségével leírhatja az adatátalakítások sorozatát a bemeneti és adatbázistáblázatként átadott adatokon).
- Felhasználó által definiált függvény (A Felhasználó által meghatározott függvény tároló skaláris, felhasználó által meghatározott függvényre és táblázatos, felhasználó által meghatározott függvényre van felosztva).
Az SQL Script Language elemei az alábbiak:
Deklaratív SQL-szkript logika (funkcionális kiterjesztés)
- Lehetővé teszi a táblatípusok meghatározását adatbázistáblákra való hivatkozás nélkül.
- Tipikus kijelentés, mint a SELECT.
- Számítási motor (CE) funkciói.
⚠️ Verzió megjegyzés: A Calculation Engine tervoperátorai, a CE_ függvények, mint például a CE_COLUMN_TABLE és a CE_JOIN, elavultak a következő miatt: SAPAz új fejlesztéseknek szabványos SQL utasításokat kell használniuk, amelyeket az optimalizáló legalább olyan jól kezel. A meglévő CE kód továbbra is fut, de migrálni kell, amikor egy eljárás legközelebb módosul.
Orchestrációs SQL Script Logic (funkcionális kiterjesztés)
Az összehangolási logika az adatfolyam megvalósítására szolgál DDL, DML és SQL lekérdezési utasítások használatával, valamint a vezérlőfolyamat logikája kötelező nyelvi konstrukciók, például hurkok és feltételes konstrukciók használatával.
- Adatdefiníciós nyelvi nyilatkozat. Pl. Séma létrehozása.
- Adatkezelési nyelv (Pl. Insert).
Kötelező SQL-szkript logika (eljárási kiterjesztés)
Az imperatív logika felosztja a logikát több adatfolyam között. Pl. IF, ELSEIF, ELSE, CASE, FOR (Loop) és Exceptions.
Az SQL Script jelentősége
Csak az SQL Script biztosítja a szükséges elemeket az adatigényes logika vagy az alkalmazáskiszolgáló működésének áttelepítéséhez az adatbázis-kiszolgálóra.
Az SQL Script kulcspontjai
- Az SQL Script végrehajtása és feldolgozása a HANA adatbázison belüli számítási motorban történik.
- Az SQL Script képes összetett számítások elvégzésére.
- Az SQL Scriptben egy helyi változó deklarálható az időközi eredmény tárolására.
- Az SQL Script Procedure több eredményt tud visszaadni az „OUTPUT Parameter” használatával, míg a Normal SQL Procedure csak egyet tud visszaadni.
- Az SQL Scriptben megadhat globális vagy helyi táblatípusokat, amelyek paraméterként használhatók.
SQL Script használatával párhuzamos feldolgozási mód érhető el.
SQL szkript eljárás példa
Az eljárás a leggyakoribb tároló. Az alábbi példa beolvassa az alkalmazottak adatait, szűri azokat, és egy kimeneti tábla paraméteren keresztül adja vissza az eredményt.
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;
Három konvenciót érdemes megjegyezni. A változók beolvasása előtt kettőspont áll, tehát :lt_all beolvassa a táblaváltozót, miközben lt_all a bal oldalon hozzárendeli. A READS SQL DATA jelzi az optimalizálónak, hogy az eljárásnak nincsenek mellékhatásai, ami agresszívabb párhuzamosítást tesz lehetővé. És egy több kimeneti paramétert visszaadó eljárás pontosan az a képesség, amivel a sima SQL nem rendelkezik.
A hívása pofonegyszerű:
CALL DHK_SCHEMA.GET_HIGH_EARNERS (50000, ?, ?);
Skaláris és táblázatos felhasználó által definiált függvények
Amikor egy eljárás műveleteket hajt végre, egy függvény egy értéket ad vissza, és felhasználható egy lekérdezésen belül. Az SQL Script kétféle formát kínál, és ezek nem felcserélhetők.
| Vizsgált paraméter | Skaláris UDF | Tábla UDF |
|---|---|---|
| Visszatér | Egyetlen érték | Egy eredményhalmaz |
| Használt | SELECT lista, WHERE záradék, kifejezések | A FROM záradék, mint egy táblázat |
| Módosíthatja az adatokat | Nem | Nem |
| Tipikus felhasználás | Újrafelhasználható számítás, például adókulcs | Paraméterezett nézet, amely szűrt sorokat ad vissza |
-- 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;
Egy táblafüggvényt a RETURNS TABLE paraméterrel definiálunk, majd a FROM záradékban kérdezünk le, ami természetes módon teszi lehetővé egy újrafelhasználható, paraméterezett adathalmaz létrehozását, amelyet egy számítási nézet vagy a jelentés felhasználhatja.
SQL szkriptek bevált gyakorlatai
Az SQL szkriptek jól teljesítenek, ha úgy írják őket, hogy a motor párhuzamosítson, és rosszul, ha alkalmazáskódként írják őket. Hat szokás teszi a különbséget.
- A kijelentőt részesítsd előnyben a felszólítóval szemben. Egyetlen halmaz alapú utasítás teljesítménye felülmúlja azt a ciklust, amely egyszerre csak egy sort dolgoz fel, gyakran nagyságrendekkel. FOR ciklust csak akkor használjunk, ha a logika valóban nem fejezhető ki halmazműveletként.
- Kerüld a kurzorokat. Soronkénti feldolgozást kényszerítenek ki, és teljesen megbénítják a számítási motort. Szinte minden kurzor átírható illesztésként vagy aggregációként.
- Tartsa a kijelentéseket függetleneknek. Két, egymásra nem hivatkozó táblaváltozó párhuzamosan kerül kiszámításra. Az összes lépésnek az előzőn keresztüli láncolása szerializálja az egész eljárást.
- Deklarálja az SQL DATA olvasása parancsot, ha az igaz. Ez azt jelzi, hogy az eljárásnak nincsenek mellékhatásai, ami további optimalizálást tesz lehetővé.
- Szűrd le a lehető leghamarabb. Az első táblaváltozó sorszámának csökkentése a további változókat is összezsugorítja, míg a végén történő szűrés már kifizette a költséget.
- Migrálás a CE_ függvényekről. Ezek elavultak, nem keverhetők szabadon SQL-lel egyetlen utasításban, és az SQL optimalizáló most már jobban kezeli ugyanezt a feladatot.
Az utasításszintű szintaxist a következő tárgyalja: SAP HANA SQL, az eljáráson belül elérhető függvények SAP HANA SQL függvények, és a modellezési objektumok, amelyek ezeket az eljárásokat felhasználják a SAP HANA modellezés tutorial.
