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.

  • ๐Ÿงฑ Vรฆlg hvor du vil oprette: Definer procedurer pรฅ skema- (katalog-) eller pakke- (indholds-) niveau afhรฆngigt af, hvor de hรธrer hjemme i SAP HANA-datamodel.
  • ๐Ÿ“ฅ Brug parametre bevidst: IN sender input, OUT returnerer output, INOUT gรธr begge dele โ€” navngiv dem for klarhedens skyld i hver signatur.
  • ๐Ÿ” Vรฆlg SQL SECURITY omhyggeligt: DEFINER kรธrer med opretterens privilegier; INVOKER kรธrer med den, der kalder - valg baseret pรฅ dataadgangspolitik.
  • ๐Ÿ“š Markรฉr som skrivebeskyttet, nรฅr det er muligt: Lร†SER SQL DATA dokumenterer intention, optimerer planlรฆgning og tillader, at proceduren vises via en resultatvisning.
  • ๐Ÿค– Brug AI til at udarbejde procedurer: AI-assistenter omdanner almindelig engelsk logik til CREATE PROCEDURE-skabeloner med parametre, undtagelseshรฅndterere og resultatvisninger.

SAP HANA SQL-lagret procedure

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, og iov_ 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 HANDLER for elegant fejlrapportering.
  • Undgรฅ Vร†LG * inde i procedurer โ€” navngiv de kolonner, du rent faktisk har brug for, sรฅ planerne forbliver stabile.

Ofte Stillede Spรธrgsmรฅl

En procedure kan have flere OUT-parametre, kan udstede DML og kaldes med CALL. En funktion returnerer en enkelt skalar- eller tabelvรฆrdi, kรธrer uden bivirkninger og bruges i SELECT, WHERE eller andre udtryk.

Standardsproget og det mest almindelige sprog er SQLScript. HANA understรธtter ogsรฅ R til procedurer, der krรฆver statistiske biblioteker, og L til lavniveau-scripting. SQLScript er det rigtige valg til nรฆsten alle forretningsprocedurer.

DEFINER kรธrer proceduren med rettighederne fra den bruger, der oprettede den โ€“ nyttigt, nรฅr proceduren skal have adgang til tabeller, som den kaldende ikke kan se direkte. INVOKER kรธrer med den kaldendes rettigheder, hvilket er sikrere for procedurer med delte vรฆrktรธjer.

Brug READS SQL DATA, nรฅr proceduren kun lรฆser data og aldrig skriver dem. Det dokumenterer intentionen, tillader resultatvisninger og lader optimeringsprogrammet planlรฆgge proceduren mere aggressivt.

Brug CALL-sรฆtningen: CALL proc_name (in_val, out_param);Fra en applikation kan du binde input og output via JDBC-, ODBC- eller Cloud SDK-driveren, eller eksponere proceduren via OData til REST-klienter.

Drop en procedure med DROP PROCEDURE proc_name; og genskab den med CREATE OR REPLACE PROCEDURE. SAP HANA understรธtter ikke ALTER PROCEDURE; standardmรธnsteret er CREATE OR REPLACE.

AI-assistenter genererer CREATE PROCEDURE-skabeloner, foreslรฅr parameternavne, skriver undtagelseshandlere og oversรฆtter logik pรฅ almindelig engelsk til SQLScript. De pรฅpeger ogsรฅ manglende skemakvalifikationer og risikabel DML i skrivebeskyttede kontekster.

Ja. AI-vรฆrktรธjer annoterer SQLScript linje for linje โ€“ og forklarer, hvad hver parameter gรธr, hvorfor en bestemt join blev valgt, og hvor proceduren kan fejle med forkerte input โ€“ hvilket gรธr kodegennemgang og onboarding meget hurtigere.

Opsummer dette indlรฆg med: