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.

  • ๐Ÿงฑ Wรคhlen Sie den Erstellungsort aus: Prozeduren werden auf Schema- (Katalog-) oder Paketebene (Inhalt) definiert, je nachdem, wo sie hingehรถren. SAP HANA-Datenmodell.
  • ๐Ÿ“ฅ Parameter bewusst einsetzen: IN รผbergibt die Eingabe, OUT gibt die Ausgabe zurรผck, INOUT macht beides โ€“ benennen Sie sie zur Verdeutlichung in jeder Signatur.
  • ๐Ÿ” Wรคhlen Sie die SQL-Sicherheit sorgfรคltig aus: DEFINER wird mit den Berechtigungen des Erstellers ausgefรผhrt; INVOKER wird mit den Berechtigungen des Aufrufers ausgefรผhrt โ€“ wรคhlen Sie basierend auf der Datenzugriffsrichtlinie.
  • ๐Ÿ“š Wenn mรถglich, als schreibgeschรผtzt markieren: READS SQL DATA dokumentiert die Absicht, optimiert die Planung und ermรถglicht die Darstellung der Prozedur รผber eine Ergebnisansicht.
  • ๐Ÿค– KI zur Erstellung von Verfahrensanweisungen nutzen: KI-Assistenten wandeln Logik in natรผrlicher Sprache in CREATE PROCEDURE-Vorlagen mit Parametern, Ausnahmebehandlungsroutinen und Ergebnisansichten um.

SAP HANA SQL-gespeicherte Prozedur

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 Eingabe ev_ fรผr den Export und iov_ 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 HANDLER fรผ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.

Hรคufig gestellte Fragen

Eine Prozedur kann mehrere OUT-Parameter haben, DML-Anweisungen ausfรผhren und wird mit CALL aufgerufen. Eine Funktion gibt einen einzelnen Skalar- oder Tabellenwert zurรผck, hat keine Seiteneffekte und wird innerhalb von SELECT-, WHERE- oder anderen Ausdrรผcken verwendet.

Die Standardsprache und am hรคufigsten verwendete Sprache ist SQLScript. HANA unterstรผtzt auรŸerdem R fรผr Prozeduren, die statistische Bibliotheken benรถtigen, und L fรผr Low-Level-Skripte. SQLScript ist fรผr nahezu alle Geschรคftsprozesse die richtige Wahl.

DEFINER fรผhrt die Prozedur mit den Berechtigungen des Benutzers aus, der sie erstellt hat โ€“ nรผtzlich, wenn die Prozedur auf Tabellen zugreifen soll, die der Aufrufer nicht direkt sehen kann. INVOKER wird mit den Berechtigungen des Aufrufers ausgefรผhrt, was fรผr gemeinsam genutzte Hilfsprozeduren sicherer ist.

Verwenden Sie READS SQL DATA, wenn die Prozedur Daten nur liest und niemals schreibt. Dies dokumentiert die Absicht, ermรถglicht Ergebnisansichten und erlaubt dem Optimierer eine aggressivere Planung der Prozedur.

Verwenden Sie die CALL-Anweisung: CALL proc_name (in_val, out_param);Binden Sie aus einer Anwendung heraus Eingaben und Ausgaben รผber den JDBC-, ODBC- oder Cloud SDK-Treiber oder stellen Sie die Prozedur รผber OData fรผr REST-Clients bereit.

Lassen Sie einen Eingriff abbrechen mit DROP PROCEDURE proc_name; und erstellen Sie es mit CREATE OR REPLACE PROCEDURE neu. SAP HANA unterstรผtzt ALTER PROCEDURE nicht; das Standardmuster ist CREATE OR REPLACE.

KI-Assistenten generieren CREATE PROCEDURE-Vorlagen, schlagen Parameternamen vor, schreiben Ausnahmebehandlungsroutinen und รผbersetzen Logik in SQLScript. Sie weisen auรŸerdem auf fehlende Schema-Qualifizierungen und riskante DML-Anweisungen in schreibgeschรผtzten Kontexten hin.

Ja. KI-Tools annotieren SQLScript Zeile fรผr Zeile โ€“ sie erklรคren die Funktion jedes Parameters, warum ein bestimmter Join gewรคhlt wurde und wo die Prozedur bei fehlerhaften Eingaben fehlschlagen kรถnnte โ€“ wodurch Code-Review und Onboarding deutlich beschleunigt werden.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: