Lagret procedure i SAP HANA (SQL-vejledning)
โก Smart opsummering
SAP HANA SQL Stored Procedure er en genbrugelig, navngivet blok af SQLScript, der udfรธrer en specifik dataoperation. Den accepterer IN-, OUT- og INOUT-parametre, kan markeres som skrivebeskyttet med READS SQL DATA og oprettes pรฅ skema- eller pakkeniveau ved hjรฆlp af CREATE PROCEDURE-syntaksen.

Hvad er en SQL-lagret procedure?
A lagret procedure er en navngiven, genanvendelig kodeenhed, der udfรธrer en specifik opgave. Procedurer kan sammensรฆttes til stรธrre programmer, hvilket er fundamentet for Modulรฆrt designรn procedure kan kalde en anden โ den, der kalder den, kaldes opkaldsprogram.
Procedurer er genanvendelige behandlingsblokke med en defineret rรฆkkefรธlge af datatransformationer. De kan acceptere flere input- og outputparametre og kan deklareres som skrivebeskyttede eller lรฆse-skrivebeskyttede.
An SQL procedure i SAP HANA kan oprettes pรฅ:
- Skemaniveau (Katalognode) โ administreres via kataloget og er synlig for alle forbrugere med de rette rettigheder.
- Pakkeniveau (Indholdsnode) โ administreret som et designtidsartefakt i en applikationspakke.
SAP HANA-lagret proceduresyntaks
Den generelle syntaks for oprettelse af en procedure i SAP HANA er vist nedenfor.
CREATE PROCEDURE <proc_name> [(<parameter_clause>)] [LANGUAGE <lang>]
[SQL SECURITY <mode>] [DEFAULT SCHEMA <default_schema_name>]
[READS SQL DATA [WITH RESULT VIEW <view_name>]] AS
{ BEGIN [SEQUENTIAL EXECUTION]
<procedure_body>
END
| HEADER ONLY }
CREATE PROCEDURE sรฆtning opretter en procedure ved hjรฆlp af det programmeringssprog, der er angivet af <lang>Standardsproget er SQLScript.
Syntakselementer forklaret
Tabellen nedenfor beskriver alle klausuler, der bruges i CREATE PROCEDURE-syntaksen.
| Element | Beskrivelse |
|---|---|
<proc_name> |
Procedurens navn. |
<parameter_clause> |
Liste over parametre, hver markeret med IN, OUT eller INOUT: โข IN โ skrivebeskyttet input sendt til proceduren. โข OUT โ output returneret fra proceduren. โข IND UD โ bรฅde sender en vรฆrdi ind og returnerer den รฆndrede vรฆrdi ud. |
LANGUAGE <lang> |
Programmeringssprog brugt i proceduren. Standard: SQLSCRIPT. |
SQL SECURITY <mode> |
Sikkerhedstilstand (Standard: DEFINER): โข DEFINER โ kรธrer med procedurens opretters rettigheder. โข INVOKER โ kรธrer med den, der ringer op, sine privilegier. |
DEFAULT SCHEMA <default_schema_name> |
Skema brugt til at fortolke ukvalificerede objekter i procedurens brรธdtekst. Hvis det udelades, bruges det aktuelle sessionsskema. |
READS SQL DATA |
Markerer proceduren som skrivebeskyttet. Den kan ikke รฆndre data eller skema, indeholder ingen DDL eller DML og kan kun kalde andre skrivebeskyttede procedurer. |
WITH RESULT VIEW <view_name> |
Definerer den resultatvisning, der bruges som procedurens output. Nรฅr en resultatvisning er til stede, kan proceduren forespรธrges af en anden SQL sรฆtning, som om det var en tabel eller en visning. |
SEQUENTIAL EXECUTION |
Tvinger procedurens indhold til at udfรธres sekventielt uden parallelisme. |
<procedure_body> |
Hoveddelen af โโproceduren, skrevet i det valgte programmeringssprog. |
HEADER ONLY |
Opretter kun procedurens egenskaber med et OID, uden at kompilere brรธdteksten. Nyttig til fremadrettedeklarationer. |
Eksempel: Opret en simpel lagret procedure
Eksemplet nedenfor opretter en skrivebeskyttet procedure, der returnerer det samlede salg for en given kunde.
CREATE PROCEDURE GET_CUSTOMER_SALES (
IN iv_customer_id NVARCHAR(10),
OUT ev_total DECIMAL(15,2)
)
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
READS SQL DATA AS
BEGIN
SELECT SUM(NET_VALUE) INTO ev_total
FROM "SALES"."ORDERS"
WHERE CUSTOMER_ID = :iv_customer_id;
END;
Kald proceduren med:
CALL GET_CUSTOMER_SALES ('C0001', ?);
SAP HANA Studio (eller enhver JDBC/ODBC-klient) returnerer vรฆrdien af ev_total i outputparameteren.
Kald af en lagret procedure
Nรฅr en lagret procedure er oprettet, kaldes den via CALL sรฆtning, eventuelt i en anden procedure, en SQLScript-funktion eller en ekstern klient. De fire mest almindelige kaldsmรธnstre er:
- Fra SQL:
CALL my_proc(p1, p2, ?);โ pladsholdere returnerer OUT-vรฆrdier. - Fra en anden procedure:
CALL another_proc(:in1, :out1); - Fra en applikation: binde inputparametre og lรฆse output via JDBC, ODBC eller Cloud SDK.
- Som en virtuel tabel: Nรฅr en resultatvisning erklรฆres, skal proceduren forespรธrges med en SELECT mod visningsnavnet.
Bedste praksis for HANA Stored Procedures
Nedenstรฅende vaner holder HANA-procedurer lรฆsbare, effektive og nemme at vedligeholde:
- Navngiv parametre med prรฆfikser:
iv_til input,ev_til eksport, ogiov_til input/output. - Marker intention med READS SQL DATA hvor proceduren reelt er skrivebeskyttet.
- Brug SQL SECURITY INVOKER for delte procedurer, der skal respektere den, der ringer op, sine privilegier.
- Ombryd hver blok i BEGIN/SLUT og hold kroppen kort โ opdel tung logik i hjรฆlpeprocedurer.
- Hรฅndter undtagelser: brug
DECLARE EXIT HANDLERfor elegant fejlrapportering. - Undgรฅ VรLG * inde i procedurer โ navngiv de kolonner, du rent faktisk har brug for, sรฅ planerne forbliver stabile.
