Gespeicherte Prozedur in SAP HANA (SQL-Tutorial)
โก Intelligente Zusammenfassung
SAP Eine HANA SQL Stored Procedure ist ein wiederverwendbarer, benannter SQLScript-Block, der eine bestimmte Datenoperation ausfรผhrt. Sie akzeptiert IN-, OUT- und INOUT-Parameter, kann mit READS SQL DATA als schreibgeschรผtzt markiert werden und wird auf Schema- oder Paketebene mit der Syntax CREATE PROCEDURE erstellt.

Was ist eine SQL-gespeicherte Prozedur?
A gespeicherte Prozedur Eine Prozedur ist eine benannte, wiederverwendbare Codeeinheit, die eine bestimmte Aufgabe ausfรผhrt. Prozeduren kรถnnen zu grรถรeren Programmen zusammengesetzt werden, was die Grundlage fรผr โฆ bildet. modulares DesignEine Prozedur kann eine andere aufrufen โ der Aufrufer wird als Prozedur bezeichnet. Anrufprogramm.
Prozeduren sind wiederverwendbare Verarbeitungsblรถcke mit einer definierten Abfolge von Datentransformationen. Sie kรถnnen mehrere Eingabe- und Ausgabeparameter akzeptieren und als schreibgeschรผtzt oder lesbar/schreibbar deklariert werden.
An SQL Verfahren in SAP HANA kann erstellt werden unter:
- Schemaebene (Katalogknoten) โ wird รผber den Katalog verwaltet und ist fรผr jeden Konsumenten mit den entsprechenden Berechtigungen sichtbar.
- Paketebene (Inhaltsknoten) โ wird als Entwurfszeitartefakt innerhalb eines Anwendungspakets verwaltet.
SAP HANA-Syntax fรผr gespeicherte Prozeduren
Die allgemeine Syntax zum Erstellen einer Prozedur in SAP HANA wird unten dargestellt.
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 }
Das CREATE PROCEDURE Die Anweisung erstellt eine Prozedur in der angegebenen Programmiersprache. <lang>Die Standardsprache ist SQLScript.
Erlรคuterung der Syntaxelemente
Die folgende Tabelle beschreibt jede Klausel, die in der CREATE PROCEDURE-Syntax verwendet wird.
| Element | Beschreibung |
|---|---|
<proc_name> |
Name des Verfahrens. |
<parameter_clause> |
Liste der Parameter, jeweils gekennzeichnet mit IN, OUT oder INOUT: โข IN โ schreibgeschรผtzte Eingabe, die an die Prozedur รผbergeben wird. โข OUT โ Ausgabe, die von der Prozedur zurรผckgegeben wird. โข EIN AUS โ beide รผbergeben einen Wert als Eingabe und geben den geรคnderten Wert als Ausgabe zurรผck. |
LANGUAGE <lang> |
In der Prozedur verwendete Programmiersprache. Standard: SQLSCRIPT. |
SQL SECURITY <mode> |
Sicherheitsmodus (Standard: DEFINER): โข DEFINIERER โ wird mit den Privilegien des Erstellers des Verfahrens ausgefรผhrt. โข AUFRUFER โ wird mit den Berechtigungen des Aufrufers ausgefรผhrt. |
DEFAULT SCHEMA <default_schema_name> |
Schema zur Auflรถsung nicht qualifizierter Objekte im Prozedurrumpf. Wird es weggelassen, wird das Schema der aktuellen Sitzung verwendet. |
READS SQL DATA |
Kennzeichnet die Prozedur als schreibgeschรผtzt. Sie kann weder Daten noch Schema รคndern, enthรคlt keine DDL- oder DML-Anweisungen und kann nur andere schreibgeschรผtzte Prozeduren aufrufen. |
WITH RESULT VIEW <view_name> |
Definiert die Ergebnisansicht, die als Ausgabe der Prozedur verwendet wird. Wenn eine Ergebnisansicht vorhanden ist, kann die Prozedur von einer anderen Prozedur abgefragt werden. SQL Eine Anweisung, als wรคre es eine Tabelle oder eine Ansicht. |
SEQUENTIAL EXECUTION |
Erzwingt die sequentielle Ausfรผhrung des Prozedurkรถrpers ohne Parallelitรคt. |
<procedure_body> |
Hauptteil der Prozedur, geschrieben in der gewรคhlten Programmiersprache. |
HEADER ONLY |
Erzeugt lediglich die Eigenschaften der Prozedur mit einer OID, ohne den Prozedurrumpf zu kompilieren. Nรผtzlich fรผr Vorwรคrtsdeklarationen. |
Beispiel: Erstellen einer einfachen gespeicherten Prozedur
Das folgende Beispiel erstellt eine schreibgeschรผtzte Prozedur, die den Gesamtumsatz fรผr einen bestimmten Kunden zurรผckgibt.
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;
Rufen Sie die Prozedur mit folgendem Befehl auf:
CALL GET_CUSTOMER_SALES ('C0001', ?);
SAP HANA Studio (oder ein beliebiger JDBC/ODBC-Client) gibt den Wert von ev_total im Ausgabeparameter.
Aufruf einer gespeicherten Prozedur
Nach ihrer Erstellung wird eine gespeicherte Prozedur รผber die CALL Die Anweisung kann optional innerhalb einer anderen Prozedur, einer SQLScript-Funktion oder eines externen Clients erfolgen. Die vier hรคufigsten Aufrufmuster sind:
- Aus SQL:
CALL my_proc(p1, p2, ?);โ Platzhalter geben OUT-Werte zurรผck. - Aus einem anderen Verfahren:
CALL another_proc(:in1, :out1); - Aus einer Anwendung: Eingabeparameter binden und Ausgaben รผber JDBC, ODBC oder das Cloud SDK lesen.
- Als virtueller Tisch: Wenn eine Ergebnisansicht deklariert wird, fragen Sie die Prozedur mit einer SELECT-Anweisung gegen den Ansichtsnamen ab.
Best Practices fรผr HANA-gespeicherte Prozeduren
Die folgenden Gewohnheiten sorgen dafรผr, dass HANA-Prozeduren lesbar, performant und wartungsfreundlich bleiben:
- Namensparameter mit Prรคfixen:
iv_fรผr Eingabeev_fรผr den Export undiov_fรผr Ein-/Ausgabe. - Markieren Sie die Absicht mit READS SQL DATA รผberall dort, wo das Verfahren tatsรคchlich schreibgeschรผtzt ist.
- Verwenden Sie den SQL-Sicherheitsaufrufer. fรผr gemeinsame Verfahren, die die Privilegien des Anrufers respektieren sollten.
- Umschlieรen Sie jeden Block mit BEGIN/END. und halten Sie den Hauptteil kurz โ teilen Sie komplexe Logik in Hilfsprozeduren auf.
- Ausnahmen behandeln: -
DECLARE EXIT HANDLERfรผr eine elegante Fehlerberichterstattung. - Vermeiden Sie SELECT * Innerhalb der Prozeduren โ benennen Sie die Spalten, die Sie tatsรคchlich benรถtigen, damit die Plรคne stabil bleiben.
