Freigeben über


ABLAUF ERSTELLEN

Von Bedeutung

Dieses Feature befindet sich in der Public Preview.

Gilt für:check marked yes Databricks SQL Databricks Runtime 17.0 und höher als "Unity-Katalog" markiert

Erstellt eine Prozedur im Unity-Katalog, die Argumente akzeptiert oder ändert, eine Reihe von SQL-Anweisungen ausführt und optional einen Resultset zurückgibt.

Zusätzlich zum Aufruf von Positionsparametern können Sie auch Prozeduren mithilfe des benannten Parameteraufrufs aufrufen.

Syntax

CREATE [OR REPLACE] PROCEDURE [IF NOT EXISTS]
    procedure_name ( [ procedure_parameter [, ...] ] )
    [ characteristic [...] ]
    AS compound_statement

procedure_parameter
    [ IN | OUT | INOUT ] parameter_name data_type
    [ DEFAULT default_expression ] [ COMMENT parameter_comment ]

characteristic
  { LANGUAGE SQL |
    SQL SECURITY INVOKER |
    NOT DETERMINISTIC |
    COMMENT procedure_comment |
    DEFAULT COLLATION UTF8_BINARY |
    MODIFIES SQL DATA }

Die Parameter

  • ODER ERSETZEN

    Wenn angegeben, wird eine Prozedur mit demselben Namen ersetzt. Sie können eine vorhandene Funktion nicht durch eine Prozedur ersetzen. Dieser Parameter kann nicht zusammen mit IF NOT EXISTS angegeben werden.

  • WENN NICHT EXISTIERT

    Wenn angegeben, wird die Prozedur nur erstellt, wenn eine Prozedur mit dieser Notiz noch nicht vorhanden ist. Wenn eine Prozedur mit demselben Namen vorhanden ist, wird die Anweisung ignoriert. Dieser Parameter kann nicht zusammen mit OR REPLACE angegeben werden.

  • procedure_name

    Ein Name für die Prozedur. Optional können Sie den Prozedurnamen mit einem Schemanamen qualifizieren. Wenn der Name nicht qualifiziert ist, wird die permanente Prozedur im aktuellen Schema erstellt.

    Der Prozedurname muss für alle Routinen (Prozeduren und Funktionen) im Schema eindeutig sein.

  • procedure_parameter

    Gibt einen Parameter der Prozedur an.

    • parameter_name

      Der Parametername muss innerhalb der Prozedur eindeutig sein.

    • IN, INOUT oder OUT

      Beschreibt optional den Modus des Parameters.

      • IN

        Definiert einen Nur-Eingabe-Parameter. Dies ist die Standardeinstellung.

      • INOUT

        Definiert einen Parameter, der ein Eingabeausgabeargument akzeptiert. Wenn die Prozedur ohne unbehandelten Fehler abgeschlossen wird, gibt sie den endgültigen Parameterwert als Ausgabe zurück.

      • AUS

        Definiert einen Ausgabeparameter. Der Parameter wird auf NULL initialisiert und, wenn die Prozedur ohne einen unbehandelten Fehler abgeschlossen wird, gibt er den endgültigen Parameterwert als Ausgabe zurück.

    • Datentyp

      Jeder unterstützte Datentyp.

    • STANDARD default_expression

      Ein optionaler Standardwert, der verwendet wird, wenn ein Funktionsaufruf dem Parameter kein Argument zuweist. default_expression muss umwandelbar in data_type sein. Der Ausdruck darf nicht auf einen anderen Parameter verweisen oder eine Unterabfrage enthalten.

      Wenn Sie einen Standardwert für einen Parameter angeben, müssen alle folgenden Parameter ebenfalls einen Standardwert haben.

      DEFAULT wird für OUT Parameter nicht unterstützt.

    • KOMMENTAR Kommentar

      Eine optionale Beschreibung des Parameters. comment muss ein STRING-Literal sein.

  • compound_statement

    Eine SQL-Verbund-Anweisung (BEGIN ... END) mit der Definition der SQL-Prozedur.

    Beim Erstellen der Prozedur wird die syntaktische Korrektheit überprüft. Der Prozedurkörper wird erst auf semantische Korrektheit überprüft, wenn die Prozedur aufgerufen wird.

  • charakteristisch

    Das Merkmal SQL SECURITY INVOKER und LANGUAGE SQL sind erforderlich. Alle anderen sind optional. Sie können eine beliebige Anzahl von Merkmalen in beliebiger Reihenfolge angeben, aber Sie können jede Klausel nur einmal angeben.

    • LANGUAGE SQL

      Die Sprache der Funktionsimplementierung.

    • SQL SECURITY INVOKER

      Gibt an, dass alle SQL-Anweisungen im Textkörper der Prozedur unter der Autorität des Benutzers ausgeführt werden, der die Prozedur aufruft.

      Beim Auflösen von Beziehungen und Routinen im Textkörper des Verfahrens verwendet Azure Databricks den aktuellen Katalog und das aktuelle Schema zum Zeitpunkt des Aufrufs.

    • NICHT DETERMINISTISCH

      Eine Prozedur wird als nicht deterministisch angenommen, d. h. sie kann unterschiedliche Ergebnisse für jeden Aufruf zurückgeben, auch wenn sie mit denselben Argumenten aufgerufen wird.

    • PROZEDURKOMMENTAR

      Ein Kommentar zum Verfahren. procedure_comment muss literal sein STRING . Der Standardwert lautet NULL.

    • STANDARD-KOLLATIONIERUNG UTF8_BINARY

      Gilt für:check marked yes Databricks SQL check marked yes Databricks Runtime 17.1 and above

      Erzwingt die Standardsortierreihenfolge der Prozedur auf UTF8_BINARY. Diese Klausel ist obligatorisch, wenn das Schema, in dem die Prozedur erstellt wird, eine Standard-Zeichensortierung erhält, die von UTF8_BINARY abweicht. Die Standardsortierung der Prozedur wird als Standardsortierung für die Prozedurparameter, ebenso wie für alle Zeichenfolgenliterale und lokalen Variablen im Prozedurrumpf verwendet.

    • ÄNDERT SQL-DATEN

      Es wird angenommen, dass eine Prozedur SQL-Daten ändert.

Beispiele

-- Demonstrate INOUT and OUT parameter usage.
> CREATE OR REPLACE PROCEDURE add(x INT, y INT, OUT sum INT, INOUT total INT)
    LANGUAGE SQL
    SQL SECURITY INVOKER
    COMMENT 'Add two numbers'
    AS BEGIN
        SET sum = x + y;
        SET total = total + sum;
    END;
> DECLARE sum INT;
> DECLARE total INT DEFAULT 0;
> CALL add(1, 2, sum, total);
> SELECT sum, total;
 3 3
> CALL add(3, 4, sum, total);
 7 10

-- The last executed query is the result set of a procedure
> CREATE PROCEDURE greeting(IN mode STRING COMMENT 'informal or formal')
    LANGUAGE SQL
    SQL SECURITY INVOKER
    AS BEGIN
        SELECT 'Hello!';
        CASE mode WHEN 'informal' THEN SELECT 'Hi!';
                  WHEN 'formal' THEN SELECT 'Pleased to meet you.';
        END CASE;
    END;
> CALL greeting('informal');
  Hi!

> CALL greeting('formal');
  Pleased to meet you.

> CALL greeting('casual');
  Hello!