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.

  • ๐Ÿงฑ Kies waar je wilt creรซren: Definieer procedures op schema- (Catalogus) of pakketniveau (Inhoud), afhankelijk van waar ze thuishoren. SAP HANA-datamodel.
  • ๐Ÿ“ฅ Gebruik parameters bewust: IN geeft invoer door, OUT geeft uitvoer terug, INOUT doet beide โ€” benoem ze voor de duidelijkheid in elke signatuur.
  • ๐Ÿ” Kies SQL-beveiliging zorgvuldig: DEFINER wordt uitgevoerd met de rechten van de maker; INVOKER wordt uitgevoerd met de rechten van de aanroeper โ€” kies op basis van het gegevenstoegangsbeleid.
  • ๐Ÿ“š Markeer indien mogelijk als alleen-lezen: READS SQL DATA documenteert de intentie, optimaliseert de planning en maakt het mogelijk om de procedure via een resultaatweergave te tonen.
  • ๐Ÿค– Gebruik AI om procedures op te stellen: AI-assistenten zetten logica in begrijpelijke taal om in CREATE PROCEDURE-sjablonen met parameters, foutafhandelaars en resultaatweergaven.

SAP HANA SQL opgeslagen procedure

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, en iov_ 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 HANDLER voor een elegante foutmelding.
  • Vermijd SELECT * Interne procedures โ€” benoem de kolommen die u daadwerkelijk nodig hebt, zodat de plannen stabiel blijven.

Veelgestelde vragen

Een procedure kan meerdere OUT-parameters hebben, DML-bewerkingen uitvoeren en wordt aangeroepen met CALL. Een functie retourneert een enkele scalaire waarde of tabelwaarde, wordt uitgevoerd zonder neveneffecten en wordt gebruikt binnen SELECT, WHERE of andere expressies.

De standaardtaal en meest gebruikte taal is SQLScript. HANA ondersteunt ook R voor procedures die statistische bibliotheken nodig hebben en L voor scripting op laag niveau. SQLScript is de juiste keuze voor vrijwel elke bedrijfsprocedure.

DEFINER voert de procedure uit met de rechten van de gebruiker die deze heeft aangemaakt โ€” handig wanneer de procedure toegang moet hebben tot tabellen die de aanroeper niet direct kan zien. INVOKER voert de procedure uit met de rechten van de aanroeper, wat veiliger is voor gedeelde hulpprogramma's.

Gebruik READS SQL DATA wanneer de procedure alleen gegevens leest en deze nooit schrijft. Dit documenteert de intentie, maakt het mogelijk om de resultaten te bekijken en zorgt ervoor dat de optimizer de procedure agressiever kan plannen.

Gebruik de CALL-instructie: CALL proc_name (in_val, out_param);Vanuit een applicatie kunt u invoer en uitvoer koppelen via de JDBC-, ODBC- of Cloud SDK-driver, of de procedure beschikbaar stellen via OData voor REST-clients.

Laat een procedure vallen met DROP PROCEDURE proc_name; en maak het opnieuw aan met CREATE OR REPLACE PROCEDURE. SAP HANA ondersteunt geen ALTER PROCEDURE; het standaardpatroon is CREATE OR REPLACE.

AI-assistenten genereren CREATE PROCEDURE-sjablonen, suggereren parameternamen, schrijven exception handlers en vertalen logica in gewone taal naar SQLScript. Ze wijzen ook op ontbrekende schema-kwalificaties en risicovolle DML-bewerkingen in alleen-lezen contexten.

Ja. AI-tools annoteren SQLScript regel voor regel en leggen uit wat elke parameter doet, waarom een โ€‹โ€‹bepaalde join is gekozen en waar de procedure mogelijk kan mislukken bij onjuiste invoer. Dit maakt codebeoordeling en onboarding veel sneller.

Vat dit bericht samen met: