Dela via


SQL-skript

Gäller för:Ja, markerad Databricks SQL Ja, markerad Databricks Runtime 16.3 och senare

Du kan använda kraftfull procedurlogik med sql-/PSM-standardbaserad skriptsyntax. Alla SQL-skript består av och börjar med ett sammansatt instruktionsblock (BEGIN ... END). En sammansatt instruktion börjar med ett avsnitt för att deklarera lokala variabler, markörer, användardefinierade villkor och villkorshanterare som används för att fånga undantag. Detta följs av den sammansatta instruktionstexten, som består av:

  • Flödeskontrollinstruktioner omfattar loopar över predikatuttryck, FOR-loopar över frågeresultat, villkorslogik som IF och CASE samt metoder för att bryta ut loopar som LEAVE och ITERATE.
  • Markörbearbetning med OPEN-, FETCH- och CLOSE-instruktioner (Databricks Runtime 18.1 och senare).
  • DDL-instruktioner som ALTER, CREATE, DROP.
  • DCL-instruktioner (datakontroll), till exempel GRANT och REVOKE.
  • DML-uttryck INSERT, UPDATE, DELETE och MERGE.
  • Frågor som returnerar resultatuppsättningar till skriptets anropare.
  • SET instruktioner för att ange lokala variabler samt sessionsvariabler.
  • Instruktionen EXECUTE IMMEDIATE.
  • Kapslade sammansatta instruktioner som ger kapslade omfång för variabler, markörer, villkor och villkorshanterare.

Skicka data mellan anroparen och en sammansatt sats

Det finns två sätt att skicka data till och från ett SQL-skript:

  • Använd sessionsvariabler för att skicka skalära värden eller små uppsättningar matriser eller kartor från ett SQL-skript till ett annat.
  • Använd parametermarkörer för att skicka skalära värden eller små uppsättningar matriser eller mappa data från en notebook-widget, Python eller ett annat språk till SQL-skriptet.

Omfång för variabel och markör

Variabler som deklareras i en sammansatt sats kan refereras till i valfritt uttryck i en sammansatt sats. Databricks löser identifierare från det innersta omfånget utåt, enligt reglerna som beskrivs i Namnmatchning. Du kan använda valfria sammansatta uttrycksetiketter för att skilja dubbletter av variabelnamn.

Markörer som deklareras i en sammansatt instruktion kan refereras till i OPEN, FETCHoch CLOSE -instruktioner i den sammansatta instruktionen. Precis som variabler kan du använda valfria sammansatta instruktionsetiketter för att skilja dubbletter av markörnamn i kapslade omfång.

Villkorshantering

SQL-skript stöder villkorshanterare, som används för att fånga upp och bearbeta undantag till antingen EXIT den sammansatta instruktionen eller CONTINUE körningen (Databricks Runtime 18.1 och senare). I villkorshanteraren kan du RESIGNAL det ursprungliga undantaget, SIGNAL ett nytt undantag eller avsluta den sammansatta satsen utan undantag.

Villkorshanterare kan definieras för att hantera tre olika klasser av villkor:

  • Ett eller flera namngivna villkor som kan vara en specifik Databricks-definierad felklass, till exempel DIVIDE_BY_ZERO eller ett användardeklarerat villkor. Dessa hanterare hanterar dessa specifika villkor.

  • En eller flera SQLSTATE:er som kan genereras av Databricks eller en SIGNAL-instruktion. Dessa hanterare kan hantera alla villkor som är associerade med den SQLSTATE.

  • En generisk SQLEXCEPTION-hanterare kan hantera alla villkor som faller under SQLEXCEPTION (alla SQLSTATE som inte är XX*** och inte 02***).

  • En NOT FOUND hanterare fångar upp alla villkor med SQLSTATE-klassen '02xxx', vilket inkluderar det CURSOR_NO_MORE_ROWS villkor som utlöses vid hämtning utanför slutet av en markörresultatuppsättning (Databricks Runtime 18.1 och senare).

Följande används för att avgöra vilken villkorshanterare som gäller för ett undantag. Den här villkorshanteraren kallas den lämpligaste hanteraren:

  • En villkorshanterare kan inte tillämpas på någon -instruktion som definierats i dess egen brödtext eller brödtexten för någon villkorshanterare som deklarerats i samma sammansatta uttryck.

  • De tillämpliga villkorshanterare som definierats i den innersta sammansatta instruktionen där undantaget utlöstes är lämpliga.

  • Om det finns fler än en lämplig hanterare är den mest specifika hanteraren den lämpligaste. En hanterare på ett namngivet villkor är till exempel mer specifik än en på en namngiven SQLSTATE. En allmän EXCEPTION-hanterare är den minst specifika.

Resultatet av en villkorshanterare är följande:

  • En EXIT hanterare kör dess -instruktion och avslutar sedan den sammansatta instruktionen som deklarerade hanteraren. Alla markörer som öppnas inom den sammansatta instruktionen och kapslade sammansatta uttryck är implicit stängda.
  • En CONTINUE hanterare kör dess -instruktion och fortsätter sedan körningen med -instruktionen efter den som aktiverade villkoret.
  • Om inte en hanterare SIGNALeller RESIGNALhanterar ett eget villkor, blir resultatet av en villkorshanterare att köra instruktionen efter den sammansatta instruktionen som angav att hanteraren skulle köras härnäst.

Lagrade SQL-procedurer

Viktig

Den här funktionen finns i offentlig förhandsversion.

Gäller för: markerad med ja Databricks SQL markerad med ja Databricks Runtime 17.0 och senare

Med instruktionen CREATE PROCEDURE kan du spara ett SQL-skript i Unity Catalog. Du kan sedan ge åtkomst till proceduren för andra användare. Dessa huvudaktörer kan sedan använda CALL-satsen för att anropa proceduren.

Lista över kontrollflödesinstruktioner

Följande är en lista över kontrollflödesuttryck som stöds:

Lista över markörinstruktioner

Följande markörinstruktioner stöds i Databricks Runtime 18.1 och senare. Markörer deklareras i den sammansatta instruktionen.