Lagrad procedur i SAP HANA (SQL-handledning)
โก Smart sammanfattning
SAP HANA SQL Stored Procedure รคr ett รฅteranvรคndbart, namngivet block av SQLScript som utfรถr en specifik dataoperation. Det accepterar IN-, OUT- och INOUT-parametrar, kan markeras som skrivskyddat med READS SQL DATA och skapas pรฅ schema- eller paketnivรฅ med hjรคlp av CREATE PROCEDURE-syntaxen.

Vad รคr en SQL-lagrad procedur?
A lagrad procedur รคr en namngiven, รฅteranvรคndbar kodenhet som utfรถr en specifik uppgift. Procedurer kan sammansรคttas till stรถrre program, vilket รคr grunden fรถr Modulรคr designEn procedur kan anropa en annan โ anroparen kallas samtalsprogram.
Procedurer รคr รฅteranvรคndbara bearbetningsblock med en definierad sekvens av datatransformationer. De kan acceptera flera in- och utparametrar och kan deklareras som skrivskyddade eller lรคs- och skrivskyddade.
An SQL fรถrfarande i SAP HANA kan skapas pรฅ:
- Schemanivรฅ (Katalognod) โ hanteras via katalogen och รคr synlig fรถr alla konsumenter med rรคtt behรถrighet.
- Paketnivรฅ (Innehรฅllsnod) โ hanteras som en designtidsartefakt inuti ett applikationspaket.
SAP Syntax fรถr lagrad HANA-procedur
Den allmรคnna syntaxen fรถr att skapa en procedur i SAP HANA visas nedan.
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-landskapet CREATE PROCEDURE programsats skapar en procedur med hjรคlp av programmeringssprรฅket som anges av <lang>Standardsprรฅket รคr SQLScript.
Syntaxelement fรถrklarade
Tabellen nedan beskriver varje klausul som anvรคnds i CREATE PROCEDURE-syntaxen.
| Elementet | BESKRIVNING |
|---|---|
<proc_name> |
Namn pรฅ proceduren. |
<parameter_clause> |
Lista รถver parametrar, var och en markerad IN, UT eller INOUT: โข IN โ skrivskyddad inmatning som skickas till proceduren. โข UT โ utdata som returneras frรฅn proceduren. โข INUT โ bรฅde skickar in ett vรคrde och returnerar det modifierade vรคrdet ut. |
LANGUAGE <lang> |
Programmeringssprรฅk som anvรคnds i proceduren. Standard: SQLSCRIPT. |
SQL SECURITY <mode> |
Sรคkerhetslรคge (standard: DEFINER): โข DEFINERARE โ kรถrs med behรถrigheterna hos procedurens skapare. โข INVOKER โ kรถrs med anroparens privilegier. |
DEFAULT SCHEMA <default_schema_name> |
Schema som anvรคnds fรถr att matcha okvalificerade objekt i procedurtexten. Om det utelรคmnas anvรคnds det aktuella sessionsschemat. |
READS SQL DATA |
Markerar proceduren som skrivskyddad. Den kan inte รคndra data eller schema, innehรฅller ingen DDL eller DML och kan bara anropa andra skrivskyddade procedurer. |
WITH RESULT VIEW <view_name> |
Definierar resultatvyn som anvรคnds som procedurens utdata. Nรคr en resultatvy finns kan proceduren efterfrรฅgas av en annan SQL uttalande som om det vore en tabell eller en vy. |
SEQUENTIAL EXECUTION |
Tvingar procedurtexten att kรถras sekventiellt utan parallellitet. |
<procedure_body> |
Procedurens huvuddel, skriven i det valda programmeringssprรฅket. |
HEADER ONLY |
Skapar endast procedurens egenskaper med ett OID, utan att kompilera brรถdtexten. Anvรคndbart fรถr framรฅtdeklarationer. |
Exempel: Skapa en enkel lagrad procedur
Exemplet nedan skapar en skrivskyddad procedur som returnerar fรถrsรคljningssumman fรถr en given kund.
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;
Anropa proceduren med:
CALL GET_CUSTOMER_SALES ('C0001', ?);
SAP HANA Studio (eller nรฅgon JDBC/ODBC-klient) returnerar vรคrdet av ev_total i utdataparametern.
Anropa en lagrad procedur
Nรคr en lagrad procedur har skapats anropas den via CALL instruktion, eventuellt inuti en annan procedur, en SQLScript-funktion eller en extern klient. De fyra vanligaste anropsmรถnstren รคr:
- Frรฅn SQL:
CALL my_proc(p1, p2, ?);โ platshรฅllare returnerar UT-vรคrden. - Frรฅn en annan procedur:
CALL another_proc(:in1, :out1); - Frรฅn en applikation: binda inparametrar och lรคsa utdata via JDBC, ODBC eller Cloud SDK.
- Som en virtuell tabell: Nรคr en resultatvy deklareras, frรฅga proceduren med en SELECT mot vynamnet.
Bรคsta praxis fรถr lagrade HANA-procedurer
Vanorna nedan gรถr HANA-procedurer lรคsbara, effektiva och enkla att underhรฅlla:
- Namnge parametrar med prefix:
iv_fรถr inmatning,ev_fรถr export, ochiov_fรถr ingรฅng/utgรฅng. - Markera avsikt med READS SQL DATA รถverallt dรคr proceduren verkligen รคr skrivskyddad.
- Anvรคnd SQL SECURITY INVOKER fรถr delade procedurer som bรถr respektera den som anropar privilegier.
- Linda varje block i BรRJAN/SLUT och hรฅll kroppen kort โ dela upp tung logik i hjรคlpprocedurer.
- Hantera undantag: anvรคndning
DECLARE EXIT HANDLERfรถr smidig felrapportering. - Undvik VรLJ * inuti procedurer โ namnge de kolumner du faktiskt behรถver sรฅ att planerna fรถrblir stabila.
