SAP HANA SQL Script-vejledning: Syntaks og eksempler
⚡ Smart opsummering
SQL-script i SAP HANA udvider standard SQL med funktionelle og proceduremæssige konstruktioner. Det understøtter lagrede procedurer og brugerdefinerede funktioner og flytter dataintensiv logik fra applikationsserveren til databasen.

Hvad er SQL Script?
SQL Script er en samling af udvidelser til SQL. Det kan bruges i lagret procedure i stedet for almindelig SQL. Det bestemmer de funktionelle og proceduremæssige udvidelser.
In SQL Scriptbruger kan definere lokale variabler for struktur og tabeller, der primært bruges til oprettelse af lagrede procedurer.
SQL-script kan også bruges i beregningsvisning. I SQL Script er der to forskellige logiske containere-
- Procedure (Procedurer giver dig mulighed for at beskrive en sekvens af datatransformationer på data, der sendes som input- og databasetabeller).
- Brugerdefineret funktion (Brugerdefineret funktionsbeholder er opdelt i skalær brugerdefineret funktion og tabel brugerdefineret funktion).
SQL Script Language-elementer er som nedenfor –
Deklarativ SQL-scriptlogik (funktionel udvidelse)
- Det tillader definition af tabeltyper uden at referere til databasetabeller.
- Typisk erklæring som SELECTs.
- Calculation Engine (CE) funktioner.
⚠️ Versionsnotat: Beregningsmotorens planoperatorer, CE_-funktionerne såsom CE_COLUMN_TABLE og CE_JOIN, er forældede af SAPNy udvikling bør bruge standard SQL-sætninger, som optimeringsprogrammet håndterer mindst lige så godt. Eksisterende CE-kode kører stadig, men bør migreres, næste gang en procedure ændres.
Orchestration SQL Script Logic (funktionel udvidelse)
Orkestreringslogik bruges til at implementere dataflow ved at bruge DDL, DML og SQL Query Statements og styre flowlogik ved hjælp af imperative sprogkonstruktioner såsom loops og conditionals.
- Data Definition Sprogerklæring. F.eks. Opret skema.
- Datamanipulationssprog (f.eks. Indsæt).
Imperativ SQL Script Logic (Procedural Extension)
Imperativ logik opdeler logikken mellem flere datastrømme. Fx IF, ELSEIF, ELSE, CASE, FOR (Loop) og Undtagelser.
Vigtigheden af SQL Script
Kun SQL Script giver de nødvendige elementer til at migrere dataintensiv logik eller driften af applikationsserveren til databaseserveren.
Nøglepunkter i SQL Script
- SQL Script udføres og behandles i beregningsmotoren i HANA-databasen.
- SQL Script er i stand til at udføre komplekse beregninger.
- I SQL Script kan en lokal variabel erklæres til at holde det mellemliggende resultat.
- SQL Script Procedure kan returnere flere resultater ved at bruge "OUTPUT Parameter", mens Normal SQL Procedure kun kan returnere én.
- I SQL Script kan du definere globale eller lokale tabeltyper, som kan bruges som parametre.
Ved at bruge SQL Script kan parallel behandlingstilstand opnås.
Eksempel på SQL-scriptprocedure
En procedure er den mest almindelige container. Eksemplet nedenfor læser medarbejderdata, filtrerer dem og returnerer resultatet via en outputtabelparameter.
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;
Tre konventioner er værd at bemærke. Et kolon sætter præfiks på enhver læsning af en variabel, så :lt_all læser tabelvariablen mens lt_all til venstre tildeler den. READS SQL DATA fortæller optimeringsprogrammet, at proceduren ikke har nogen bivirkninger, hvilket tillader mere aggressiv parallelisering. Og en procedure, der returnerer flere outputparametre, er præcis den funktion, almindelig SQL mangler.
Det er ligetil at kalde det:
CALL DHK_SCHEMA.GET_HIGH_EARNERS (50000, ?, ?);
Skalære og tabelbrugerdefinerede funktioner
Når en procedure udfører handlinger, returnerer en funktion en værdi og kan bruges i en forespørgsel. SQL Script tilbyder to former, og de er ikke udskiftelige.
| Parameter | Skalær UDF | Tabel-UDF |
|---|---|---|
| Returpolitik | En enkelt værdi | Et resultatsæt |
| Brugt i | SELECT-liste, WHERE-klausul, udtryk | FROM-klausulen, ligesom en tabel |
| Kan ændre data | Ingen | Ingen |
| Typisk brug | Genanvendelig beregning, såsom en skattesats | Parameteriseret visning, der returnerer filtrerede rækker |
-- 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;
En tabelfunktion defineres med RETURNS TABLE og forespørges derefter i FROM-klausulen, hvilket gør det til den naturlige måde at opbygge et genbrugeligt, parametriseret datasæt, som en beregningsvisning eller rapporten kan forbruge.
SQL Script Bedste Praksis
SQL Script fungerer godt, når det er skrevet for at lade motoren parallelisere, og dårligt, når det er skrevet som applikationskode. Seks vaner gør forskellen.
- Foretræk deklarativ frem for imperativ. En enkelt sætbaseret sætning overgår en løkke, der behandler rækker én ad gangen, ofte med størrelsesordener. Brug kun en FOR-løkke, når logikken reelt ikke kan udtrykkes som en sætoperation.
- Undgå markører. De gennemtvinger række-for-række-behandling og omgås beregningsmotoren fuldstændigt. Næsten alle markører kan omskrives som en join eller en aggregering.
- Hold udsagnene uafhængige. To tabelvariabler, der ikke refererer til hinanden, beregnes parallelt. Ved at kæde hvert trin sammen med det foregående serialiseres hele proceduren.
- Erklær READS SQL DATA, hvor sandt. Det signalerer, at proceduren ikke har nogen bivirkninger, hvilket muliggør yderligere optimering.
- Filtrer så tidligt som muligt. At reducere antallet af rækker i den første tabelvariabel krymper alt nedstrøms, hvorimod filtrering til sidst allerede har betalt omkostningerne.
- Migrer væk fra CE_-funktioner. De er udfasede, kan ikke blandes frit med SQL i én sætning, og SQL-optimeringsværktøjet håndterer nu det samme arbejde bedre.
Syntaks på erklæringsniveau er dækket i SAP HANA SQL, de funktioner, der er tilgængelige i en procedure i SAP HANA SQL-funktioner, og de modelleringsobjekter, der bruger disse procedurer i SAP HANA-modellering tutorial.
