Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:
Databricks SQL Databricks Runtime 17.0 und höher
"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.
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 | DEFINER } |
NOT DETERMINISTIC |
COMMENT procedure_comment |
DEFAULT COLLATION default_collation_name |
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; Dadurch wird ROUTINE_ALREADY_EXISTS erhöht. Sie können diesen Parameter nicht mit
IF NOT EXISTS; angeben, dass beide INVALID_SQL_SYNTAX. CREATE_ROUTINE_WITH_IF_NOT_EXISTS_AND_REPLACE.WENN NICHT EXISTIERT
Wenn angegeben, wird die Prozedur nur erstellt, wenn eine Prozedur mit diesem Namen noch nicht vorhanden ist. Wenn eine Prozedur mit demselben Namen vorhanden ist, wird die Anweisung ignoriert. Sie können diesen Parameter nicht mit
OR REPLACE; angeben, dass beide INVALID_SQL_SYNTAX. CREATE_ROUTINE_WITH_IF_NOT_EXISTS_AND_REPLACE.-
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. Wenn eine Routine mit demselben Namen vorhanden ist und weder
OR REPLACEIF NOT EXISTSangegeben noch angegeben wird, löst Azure Databricks ROUTINE_ALREADY_EXISTS aus. procedure_parameter
Gibt einen Parameter der Prozedur an.
-
Der Parametername muss innerhalb der Prozedur eindeutig sein; andernfalls löst Azure Databricks DUPLICATE_ROUTINE_PARAMETER_NAMES aus.
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
NULLinitialisiert und, wenn die Prozedur ohne einen unbehandelten Fehler abgeschlossen wird, gibt er den endgültigen Parameterwert als Ausgabe zurück.
-
Jeder unterstützte Datentyp.
STANDARD default_expression
Ein optionaler Standardwert, der verwendet wird, wenn ein Funktionsaufruf dem Parameter kein Argument zuweist.
default_expressionmuss umwandelbar indata_typesein. 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.
DEFAULTwird fürOUToderINOUTParameter nicht unterstützt; die Angabe einer wird PROCEDURE_CREATION_PARAMETER_OUT_INOUT_WITH_DEFAULT ausgelöst.KOMMENTAR Kommentar
Eine optionale Beschreibung des Parameters.
commentmuss einSTRING-Literal sein.
-
-
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
Einer von
SQL SECURITY INVOKERoderSQL SECURITY DEFINER, undLANGUAGE SQLsind 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.
Sehen Sie sich autorisierte Benutzer und Sitzungsbenutzer an, wie sich der autorisierte Benutzer und der Sitzungsbenutzer innerhalb von Prozedurkörpern und über geschachtelte Anrufe verhalten.
SQL SECURITY DEFINER
Gilt für:
Databricks SQLGibt an, dass alle SQL-Anweisungen im Textkörper der Prozedur immer unter der Autorität des Besitzers (Definer) der Prozedur ausgeführt werden, unabhängig davon, welcher Benutzer die Prozedur aufruft. Das heißt, der Besitzer ist der autorisierte Benutzer für den Textkörper. Der Aufrufer erfordert nur die
EXECUTEBerechtigung für die Prozedur. Alle Zugriffsprüfungen für Beziehungen, Routinen und andere Objekte, auf die vom Textkörper verwiesen wird, werden für den autorisierten Benutzer ausgewertet.Beim Auflösen von Beziehungen und Routinen im Textkörper der Prozedur verwendet Azure Databricks den Katalog und das Schema, das zum Zeitpunkt der Erstellung der Prozedur aktuell war. Die sitzungsbezogenen Objekte des Aufrufers, z. B. temporäre Ansichten, temporäre Tabellen, Sitzungsvariablen und Sitzungsbereichsfunktionen, werden vom Auflösungssuchpfad im Textkörper ausgeschlossen, sodass sie nicht durch ihre nicht qualifizierten Namen referenziert werden können. Sie bleiben verfügbar, wenn mit dem
sessionSchemaqualifizierer verwiesen wird, zsession.object_name. B. odersystem.session.object_name.SQL-Konfigurationen (z. B. die Standardzeitzone), die sich auf die Semantik von Anweisungen im Textkörper auswirken,
ANSI_MODEwerden ebenfalls zur Erstellungszeit erfasst und bei jedem Aufruf der Prozedur verwendet, unabhängig von den Sitzungseinstellungen des Aufrufs.Innerhalb eines
SQL SECURITY DEFINERTextkörpers gibt current_catalog den Katalog zurück, der beim Erstellen der Prozedur aktuell war, und current_schema und current_database das Schema zurück, das beim Erstellen der Prozedur aktuell war.SQL SECURITY DEFINERändert den Wert von session_user nicht: Er gibt weiterhin den Benutzer zurück, der die DateiCALLausgestellt hat. Lesen Sie autorisierten Benutzer und Sitzungsbenutzer , wie sich der autorisierte Benutzer und der Sitzungsbenutzer innerhalb einesSQL SECURITY DEFINERTextkörpers unterscheiden.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_commentmuss literal seinSTRING. Der Standardwert lautetNULL.STANDARDKOLLATION default_collation_name
Gilt für:
Databricks SQL
Databricks Runtime 17.1 and aboveLegt die Standardsortierung der Prozedur fest. Die Standardsortierung der Prozedur wird als Standardsortierung für Prozedurparameter,
DEFAULTAusdrücke für Parameter, typierte lokale Variablen verwendet,STRINGdie im Prozedurtext deklariert sind, undSTRINGLiterale, die im Prozedurtext verwendet werden.In Databricks Runtime 17.1 bis Databricks Runtime 18.2
default_collation_namemuss der Wert seinUTF8_BINARY. Diese Klausel ist obligatorisch, wenn das Schema, in dem die Prozedur erstellt wird, eine Standard-Zeichensortierung erhält, die vonUTF8_BINARYabweicht.Gilt für:
Databricks SQL
Databricks Runtime 18 and abovedefault_collation_namekann ein beliebiger unterstützter Sortierungsname sein.Wenn nicht angegeben, wird die Standardsortierung vom Schema abgeleitet, in dem die Prozedur erstellt wird.
ÄNDERT SQL-DATEN
Es wird angenommen, dass eine Prozedur SQL-Daten ändert.
Häufige Fehlerbedingungen
- DUPLICATE_CLAUSES
- DUPLICATE_ROUTINE_PARAMETER_NAMES
- INVALID_DEFAULT_VALUE
- INVALID_SQL_SYNTAX. CREATE_ROUTINE_WITH_IF_NOT_EXISTS_AND_REPLACE
- MISSING_CLAUSES_FOR_OPERATION
- PROCEDURE_CREATION_EMPTY_ROUTINE
- PROCEDURE_CREATION_PARAMETER_OUT_INOUT_WITH_DEFAULT
- PROCEDURE_NOT_SUPPORTED
- PROCEDURE_NOT_SUPPORTED_WITH_HMS
- ROUTINE_ALREADY_EXISTS
- UNSUPPORTED_PROCEDURE_COLLATION
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!
-- Use SQL SECURITY DEFINER so the procedure runs with the owner's privileges
-- and references its creation-time catalog and schema. The invoker only needs
-- EXECUTE on `audit_app.ops.log_event`; they do not need any privileges on the
-- underlying `audit_app.private.audit_log` table.
> USE CATALOG audit_app;
> USE SCHEMA ops;
> CREATE OR REPLACE PROCEDURE log_event(IN event STRING)
LANGUAGE SQL
SQL SECURITY DEFINER
MODIFIES SQL DATA
AS BEGIN
INSERT INTO audit_app.private.audit_log
VALUES (current_user(), current_catalog(), current_schema(), event);
END;
-- Even when invoked from a different catalog/schema and by a different user,
-- the body still inserts into `audit_app.private.audit_log`, with
-- `current_catalog()` and `current_schema()` returning the values frozen at
-- creation time. `session_user()` is unaffected by `SQL SECURITY DEFINER`
-- and records the actual invoker -- which is what audit logs typically want.
> USE CATALOG sales;
> USE SCHEMA reports;
> CALL audit_app.ops.log_event('checkout_completed');
Verwandte Artikel
- RUFEN
- DROP PROCEDURE (Prozedur entfernen)
- VERFAHREN ANZEIGEN
- BESCHREIBEN DER PROZEDUR
- GRANT
- REVOKE