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.

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, ogiov_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 HANDLERfor elegant feilrapportering. - Unngå VELG * inside procedures – navngi kolonnene du faktisk trenger, slik at planene forblir stabile.
