Opgeslagen procedure in SAP HANA (SQL-handleiding)
โก Slimme samenvatting
SAP Een HANA SQL-stored procedure is een herbruikbaar, benoemd blok SQLScript dat een specifieke gegevensbewerking uitvoert. Het accepteert IN-, OUT- en INOUT-parameters, kan als alleen-lezen worden gemarkeerd met READS SQL DATA en wordt op schema- of pakketniveau gemaakt met de CREATE PROCEDURE-syntaxis.
Wat is een SQL-stored procedure?
A opgeslagen procedure Een procedure is een benoemde, herbruikbare code-eenheid die een specifieke taak uitvoert. Procedures kunnen worden gecombineerd tot grotere programma's, wat de basis vormt van modulair ontwerpEen procedure kan een andere procedure aanroepen; de aanroeper wordt de procedure genoemd. belprogramma.
Procedures zijn herbruikbare verwerkingsblokken met een gedefinieerde reeks gegevenstransformaties. Ze kunnen meerdere invoer- en uitvoerparameters accepteren en kunnen als alleen-lezen of als lees-schrijfbaar worden gedeclareerd.
An SQL procedure binnen SAP HANA kan worden aangemaakt op:
- Schemaniveau (Catalogusknooppunt) โ beheerd via de catalogus en zichtbaar voor elke gebruiker met de juiste rechten.
- Pakketniveau (Contentknooppunt) โ beheerd als een ontwerp-artefact binnen een applicatiepakket.
SAP Syntaxis van opgeslagen procedures in HANA
De algemene syntaxis voor het maken van een procedure in SAP HANA wordt hieronder weergegeven.
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 }
De CREATE PROCEDURE Deze instructie maakt een procedure aan met behulp van de programmeertaal die is gespecificeerd door <lang>De standaardtaal is SQLScript.
Syntactische elementen uitgelegd
De onderstaande tabel beschrijft elke clausule die wordt gebruikt in de CREATE PROCEDURE-syntaxis.
| Element | Beschrijving |
|---|---|
<proc_name> |
Naam van de procedure. |
<parameter_clause> |
Lijst met parameters, elk gemarkeerd met IN, OUT of INOUT: โข IN โ Alleen-lezen invoer die aan de procedure wordt doorgegeven. โข OUT โ uitvoer die door de procedure wordt geretourneerd. โข INUIT โ beide geven een waarde door als invoer en retourneren de gewijzigde waarde als uitvoer. |
LANGUAGE <lang> |
Programmeertaal die in de procedure wordt gebruikt. Standaard: SQLSCRIPT. |
SQL SECURITY <mode> |
Beveiligingsmodus (Standaard: DEFINER): โข DEFINIรREN โ wordt uitgevoerd met de rechten van de maker van de procedure. โข INVOKER โ wordt uitgevoerd met de rechten van de beller. |
DEFAULT SCHEMA <default_schema_name> |
Schema dat wordt gebruikt om niet-gekwalificeerde objecten in de procedurebody op te lossen. Indien weggelaten, wordt het schema van de huidige sessie gebruikt. |
READS SQL DATA |
Hiermee wordt de procedure als alleen-lezen gemarkeerd. Deze kan geen gegevens of schema wijzigen, bevat geen DDL- of DML-instructies en kan alleen andere alleen-lezen procedures aanroepen. |
WITH RESULT VIEW <view_name> |
Definieert de resultaatweergave die als uitvoer van de procedure wordt gebruikt. Wanneer er een resultaatweergave aanwezig is, kan de procedure door een andere procedure worden opgevraagd. SQL een weergave alsof het een tabel of een view was. |
SEQUENTIAL EXECUTION |
Dwingt de procedurebody om sequentieel en zonder parallelle uitvoering te werken. |
<procedure_body> |
Het hoofdgedeelte van de procedure, geschreven in de gekozen programmeertaal. |
HEADER ONLY |
Hiermee worden alleen de eigenschappen van de procedure met een OID aangemaakt, zonder de procedurebody te compileren. Handig voor forward declarations. |
Voorbeeld: Een eenvoudige opgeslagen procedure maken
Het onderstaande voorbeeld creรซert een alleen-lezen procedure die het verkooptotaal voor een bepaalde klant retourneert.
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;
Roep de procedure aan met:
CALL GET_CUSTOMER_SALES ('C0001', ?);
SAP HANA Studio (of een willekeurige JDBC/ODBC-client) retourneert de waarde van ev_total in de uitvoerparameter.
Een opgeslagen procedure aanroepen
Nadat een opgeslagen procedure is aangemaakt, wordt deze aangeroepen via de CALL een instructie, eventueel binnen een andere procedure, een SQLScript-functie of een externe client. De vier meest voorkomende aanroeppatronen zijn:
- Vanuit SQL:
CALL my_proc(p1, p2, ?);โ plaatshouders retourneren OUT-waarden. - Vanuit een andere procedure:
CALL another_proc(:in1, :out1); - Vanuit een applicatie: Koppel invoerparameters en lees uitvoer via JDBC, ODBC of de Cloud SDK.
- Als virtuele tafel: Wanneer een resultaatweergave wordt gedeclareerd, moet de procedure worden bevraagd met een SELECT-query op basis van de weergavenaam.
Beste werkwijzen voor HANA stored procedures
De onderstaande gewoontes zorgen ervoor dat HANA-procedures leesbaar, performant en gemakkelijk te onderhouden blijven:
- Parameters benoemen met voorvoegsels:
iv_voor invoer,ev_voor export, eniov_voor invoer/uitvoer. - Markeer de intentie met READS SQL DATA waarbij de procedure daadwerkelijk alleen-lezen is.
- Gebruik SQL SECURITY INVOKER voor gedeelde procedures die de bevoegdheden van de beller moeten respecteren.
- Omwikkel elk blok met BEGIN/END En houd de code kort: verdeel complexe logica in ondersteunende procedures.
- Afhandeling van uitzonderingen: .
DECLARE EXIT HANDLERvoor een elegante foutmelding. - Vermijd SELECT * Interne procedures โ benoem de kolommen die u daadwerkelijk nodig hebt, zodat de plannen stabiel blijven.

