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 16.3 und höher
Sie können leistungsstarke prozedurale Logik mit auf SQL/PSM-Standard basierender Skriptingsyntax verwenden.
Jedes SQL-Skript enthält und beginnt mit einem Block Verbundanweisung (BEGIN ... END).
Eine zusammengesetzte Anweisung beginnt mit einem Abschnitt, um lokale Variablen, Cursor, benutzerdefinierte Bedingungen und Bedingungshandler zu deklarieren, die zum Abfangen von Ausnahmen verwendet werden.
Dies folgt dem Verbundanweisungstext, der Folgendes enthält:
- Steueranweisungen umfassen Schleifen über Prädikatausdrücke, FOR-Schleifen über Abfrageergebnisse, bedingte Logik wie IF und CASE und Mittel, um Schleifen zu verlassen, wie LEAVE und ITERATE.
- Cursorverarbeitung mit OPEN-, FETCH- und CLOSE-Anweisungen (Databricks Runtime 18.1 und höher).
- DDL-Anweisungen wie
ALTER,CREATE,DROP. - DCL (Data Control)-Anweisungen wie GRANT und REVOKE.
- DML-Anweisungen INSERT, UPDATE, DELETEund MERGE.
- Abfragen, die Resultsets an den Aufrufer des Skripts zurückgeben.
- SET Anweisungen zum Festlegen lokaler Variablen sowie Sitzungsvariablen.
- Die EXECUTE IMMEDIATE-Anweisung.
- Geschachtelte Verbundanweisungen, die geschachtelte Bereiche für Variablen, Cursor, Bedingungen und Bedingungshandler bereitstellen.
Übergeben von Daten zwischen dem Aufrufer und der Verbundanweisung
Es gibt zwei Möglichkeiten zum Übergeben von Daten an und aus einem SQL-Skript:
- Verwenden Sie Sitzungsvariablen, um skalare Werte oder kleine Gruppen von Arrays oder Zuordnungen von einem SQL-Skript zu einem anderen zu übergeben.
- Verwenden Sie Parametermarkierungen, um skalare Werte oder kleine Gruppen von Arrays oder Kartendaten aus einem Notizbuch-Widget, Python oder einer anderen Sprache an das SQL-Skript zu übergeben.
Bereichsdefinition für Variable und Cursor
Variablen, die in einer zusammengesetzten Anweisung deklariert sind, können in einem beliebigen Ausdruck in einer zusammengesetzten Anweisung referenziert werden. Databricks löst Bezeichner aus dem innersten Bereich nach außen auf, indem es die in Namensauflösung beschriebenen Regeln befolgt. Sie können die optionale Verbundanweisung Bezeichnungen verwenden, um doppelte Variablennamen zu unterscheiden.
Cursor, die in einer zusammengesetzten Anweisung deklariert sind, können in OPEN, FETCHund CLOSE Anweisungen innerhalb dieser zusammengesetzten Anweisung referenziert werden. Wie Variablen können Sie optionale zusammengesetzte Anweisungsbeschriftungen verwenden, um doppelte Cursornamen in geschachtelten Bereichen zu unterscheiden.
Bedingungsbehandlung
SQL-Skripting unterstützt Bedingungshandler, die zum Abfangen und Verarbeiten von Ausnahmen von EXIT der zusammengesetzten Anweisung oder CONTINUE Ausführung verwendet werden (Databricks Runtime 18.1 und höher).
Innerhalb des Bedingungshandlers können Sie die RESIGNAL-Anweisung für die ursprüngliche Ausnahme oder die SIGNAL-Anweisung für eine neue Ausnahme verwenden oder die Verbundausweisung ohne Ausnahme beenden.
Bedingungshandler können definiert werden, um drei unterschiedliche Klassen von Bedingungen zu behandeln:
Eine oder mehrere benannte Bedingungen, die eine bestimmte databricks-definierte Fehlerklasse wie
DIVIDE_BY_ZEROoder eine vom Benutzer deklarierte Bedingung sein können. Diese Handler behandeln diese spezifischen Bedingungen.Eine oder mehrere
SQLSTATEs, die von Databricks oder durch eineSIGNAL-Anweisung des Benutzers ausgelöst werden können. Diese Handler können jede Bedingung verarbeiten, die diesemSQLSTATEzugeordnet ist.Ein generischer
SQLEXCEPTION-Handler kann alle Bedingungen erfassen, die in dieSQLEXCEPTIONfallen (alleSQLSTATE, die nichtXX***und nicht02***sind).Ein
NOT FOUNDHandler fängt alle Bedingungen mit der SQLSTATE-Klasse'02xxx'ab, die die CURSOR_NO_MORE_ROWS Bedingung enthält, die beim Abrufen über das Ende eines Cursor-Resultsets hinaus ausgelöst wird (Databricks Runtime 18.1 und höher).
Folgendes wird verwendet, um zu entscheiden, welcher Bedingungshandler auf eine Ausnahme angewendet wird. Dieser Bedingungshandler wird als am besten geeigneten Handler bezeichnet:
Ein Bedingungshandler kann nicht auf eine Anweisung angewendet werden, die in seinem eigenen Text oder im Text eines Bedingungshandlers definiert ist, der in derselben Verbundanweisung deklariert ist.
Die anwendbaren Bedingungshandler, die in der innersten zusammengesetzten Anweisung definiert sind, in der die Ausnahme ausgelöst wurde, sind geeignet.
Wenn mehr als ein geeigneter Handler verfügbar ist, ist der spezifischste Handler die am besten geeignete. Ein Handler für eine benannte Bedingung ist beispielsweise spezifischer als ein Handler für eine benannte
SQLSTATE. Ein generischerEXCEPTION-Handler ist der am wenigsten spezifische.
Das Ergebnis eines Bedingungshandlers lautet wie folgt:
- Ein
EXITHandler führt seine Anweisung aus und beendet dann die zusammengesetzte Anweisung, die den Handler deklariert hat. Alle Cursor, die innerhalb dieser Verbundanweisungen und geschachtelten Verbundanweisungen geöffnet werden, werden implizit geschlossen. - Ein
CONTINUEHandler führt seine Anweisung aus und setzt dann die Ausführung mit der Anweisung fort, die auf die Bedingung folgt. - Sofern kein Handler eine
SIGNAL- oderRESIGNAL-Anweisung für seine eigene Bedingung hat, besteht das Ergebnis eines Bedingungshandlers darin, die Anweisung nach der Verbundanweisung auszuführen, die den Handler für die nächste Ausführung deklariert hat.
Gespeicherte SQL-Prozeduren
Wichtig
Dieses Feature befindet sich in der Public Preview.
Gilt für:
Databricks SQL
Databricks Runtime 17.0 und höher
Mit der CREATE PROCEDURE-Anweisung können Sie ein SQL-Skript im Unity-Katalog speichern. Anschließend können Sie den Zugriff auf die Prozedur anderen Hauptbenutzern gewähren. Diese Akteure können dann die CALL-Anweisung verwenden, um die Prozedur aufzurufen.
Liste der Kontrollflussanweisungen
Diese Liste enthält die unterstützten Kontrollflussanweisungen:
- CASE-Anweisung
- CLOSE-Anweisung
- BEGIN END-Verbundanweisung
- FETCH-Anweisung
- FOR-Anweisung
- GET DIAGNOSTICS-Anweisung
- IF THEN ELSE-Anweisung
- ITERATE-Anweisung
- LEAVE-Anweisung
- LOOP-Anweisung
- OPEN-Anweisung
- REPEAT-Anweisung
- RESIGNAL-Anweisung
- SIGNAL-Anweisung
- WHILE-Anweisung
Liste der Cursoranweisungen
Die folgenden Cursoranweisungen werden in Databricks Runtime 18.1 und höher unterstützt. Cursor werden in der zusammengesetzten Anweisung deklariert.