Lagret prosedyre i SAP HANA (SQL-opplæring)

⚡ Smart oppsummering

SAP HANA SQL Stored Procedure er en gjenbrukbar, navngitt blokk av SQLScript som utfører en spesifikk dataoperasjon. Den aksepterer IN-, OUT- og INOUT-parametere, kan merkes som skrivebeskyttet med READS SQL DATA, og opprettes på skjema- eller pakkenivå ved hjelp av CREATE PROCEDURE-syntaksen.

  • 🧱 Velg hvor du vil opprette: Definer prosedyrer på skjemanivå (katalognivå) eller pakkenivå (innholdsnivå), avhengig av hvor de hører hjemme i SAP HANA-datamodell.
  • 📥 Bruk parametere med vilje: IN sender input, OUT returnerer output, INOUT gjør begge deler – navngi dem for klarhetens skyld i hver signatur.
  • 🔐 Velg SQL SECURITY nøye: DEFINER kjører med oppretterens rettigheter; INVOKER kjører med innringerens – valg basert på datatilgangspolicy.
  • 📚 Merk som skrivebeskyttet når det er mulig: LESER SQL DATA dokumenterer intensjon, optimaliserer planlegging og lar prosedyren eksponeres gjennom en resultatvisning.
  • 🤖 Bruk AI til å utarbeide prosedyrer: AI-assistenter gjør logikk fra enkel engelsk om til maler for OPPRETT PROSEDURE med parametere, unntaksbehandlere og resultatvisninger.

SAP HANA SQL-lagret prosedyre

Hva er en SQL-lagret prosedyre?

A lagret prosedyre er en navngitt, gjenbrukbar kodeenhet som utfører en spesifikk oppgave. Prosedyrer kan settes sammen til større programmer, som er grunnlaget for Modulær designÉn prosedyre kan kalle en annen – den som kaller blir referert til som anropsprogram.

Prosedyrer er gjenbrukbare behandlingsblokker med en definert sekvens av datatransformasjoner. De kan akseptere flere input- og output-parametere og kan deklareres som skrivebeskyttet eller lese-skrive.

An SQL prosedyre i SAP HANNA kan opprettes på:

  • Skjemanivå (Katalognode) – administreres gjennom katalogen og er synlig for alle forbrukere med de riktige rettighetene.
  • Pakkenivå (Innholdsnode) – administrert som en designtidsartefakt i en applikasjonspakke.

SAP Syntaks for lagret HANA-prosedyre

Den generelle syntaksen for å opprette en prosedyre 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 }

Ocuco CREATE PROCEDURE setning oppretter en prosedyre ved hjelp av programmeringsspråket spesifisert av <lang>Standardspråket er SQLScript.

Syntakselementer forklart

Tabellen nedenfor beskriver alle klausulene som brukes i CREATE PROCEDURE-syntaksen.

Element Tekniske beskrivelser
<proc_name> Navn på prosedyren.
<parameter_clause> Liste over parametere, hver merket INN, UT eller INOUT:
IN — skrivebeskyttet input sendt til prosedyren.
OUT — utdata returnert fra prosedyren.
INN UT — både sender en verdi inn og returnerer den modifiserte verdien ut.
LANGUAGE <lang> Programmeringsspråket som brukes i prosedyren. Standard: SQLSCRIPT.
SQL SECURITY <mode> Sikkerhetsmodus (standard: DEFINER):
DEFINER — kjører med rettighetene til prosedyrens oppretter.
INVOKER — kjører med innringerens rettigheter.
DEFAULT SCHEMA <default_schema_name> Skjema som brukes til å løse ukvalifiserte objekter i prosedyrens innhold. Hvis utelatt, brukes gjeldende sesjonsskjema.
READS SQL DATA Markerer prosedyren som skrivebeskyttet. Den kan ikke endre data eller skjema, inneholder ingen DDL eller DML, og kan bare kalle andre skrivebeskyttede prosedyrer.
WITH RESULT VIEW <view_name> Definerer resultatvisningen som brukes som prosedyrens utdata. Når en resultatvisning er tilstede, kan prosedyren spørres av en annen SQL setning som om det var en tabell eller en visning.
SEQUENTIAL EXECUTION Tvinger prosedyren til å utføres sekvensielt uten parallellisme.
<procedure_body> Hoveddelen av prosedyren, skrevet i det valgte programmeringsspråket.
HEADER ONLY Oppretter kun prosedyrens egenskaper med en OID, uten å kompilere brødteksten. Nyttig for fremoverrettet deklarasjon.

Eksempel: Opprett en enkel lagret prosedyre

Eksemplet nedenfor oppretter en skrivebeskyttet prosedyre som returnerer totalsalg for en gitt 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;

Kall prosedyren med:

CALL GET_CUSTOMER_SALES ('C0001', ?);

SAP HANA Studio (eller en hvilken som helst JDBC/ODBC-klient) returnerer verdien av ev_total i utgangsparameteren.

Kalle en lagret prosedyre

Når den er opprettet, kalles en lagret prosedyre gjennom CALL setning, eventuelt i en annen prosedyre, en SQLScript-funksjon eller en ekstern klient. De fire vanligste anropsmønstrene er:

  • Fra SQL: CALL my_proc(p1, p2, ?); — plassholdere returnerer UT-verdier.
  • Fra en annen prosedyre: CALL another_proc(:in1, :out1);
  • Fra en applikasjon: binde inngangsparametere og lese utdata via JDBC, ODBC eller Cloud SDK.
  • Som en virtuell tabell: Når en resultatvisning er deklarert, spør prosedyren med en SELECT mot visningsnavnet.

Beste praksis for HANA-lagrede prosedyrer

Vanene nedenfor sørger for at HANA-prosedyrer er lesbare, effektive og enkle å vedlikeholde:

  • Navngi parametere med prefikser: iv_ for innspill, ev_ for eksport, og iov_ for inndata/utdata.
  • Merk intensjon med READS SQL DATA der prosedyren virkelig er skrivebeskyttet.
  • Bruk SQL SECURITY INVOKER for delte prosedyrer som skal respektere innringerens privilegier.
  • Pakk hver blokk inn i BEGIN/SLUT og hold kroppen kort – del tung logikk inn i hjelpeprosedyrer.
  • Håndter unntak: bruke DECLARE EXIT HANDLER for elegant feilrapportering.
  • Unngå VELG * inside procedures – navngi kolonnene du faktisk trenger, slik at planene forblir stabile.

Spørsmål og svar

En prosedyre kan ha flere OUT-parametere, kan utstede DML og kalles med CALL. En funksjon returnerer en enkelt skalar- eller tabellverdi, kjører uten bivirkninger og brukes i SELECT, WHERE eller andre uttrykk.

Standardspråket og det vanligste språket er SQLScript. HANA støtter også R for prosedyrer som trenger statistiske biblioteker og L for lavnivåskripting. SQLScript er det riktige valget for nesten alle forretningsprosedyrer.

DEFINER kjører prosedyren med rettighetene til brukeren som opprettet den – nyttig når prosedyren skal ha tilgang til tabeller som innringeren ikke kan se direkte. INVOKER kjører med innringerens rettigheter, noe som er tryggere for prosedyrer med delt verktøy.

Bruk READS SQL DATA når prosedyren bare leser data og aldri skriver dem. Dette dokumenterer intensjon, tillater resultatvisninger og lar optimalisatoren planlegge prosedyren mer aggressivt.

Bruk CALL-setningen: CALL proc_name (in_val, out_param);Fra et program, bind inndata og utdata via JDBC-, ODBC- eller Cloud SDK-driveren, eller eksponer prosedyren via OData for REST-klienter.

Dropp en prosedyre med DROP PROCEDURE proc_name; og gjenskap den med CREATE OR REPLACE PROCEDURE. SAP HANA støtter ikke ALTER PROCEDURE; standardmønsteret er CREATE OR REPLACE.

AI-assistenter genererer CREATE PROCEDURE-maler, foreslår parameternavn, skriver unntaksbehandlere og oversetter logikk på vanlig engelsk til SQLScript. De påpeker også manglende skjemakvalifikasjoner og risikabel DML i skrivebeskyttede kontekster.

Ja. AI-verktøy kommenterer SQLScript linje for linje – og forklarer hva hver parameter gjør, hvorfor en bestemt kobling ble valgt, og hvor prosedyren kan mislykkes med feil inndata – noe som gjør kodegjennomgang og onboarding mye raskere.

Oppsummer dette innlegget med: