Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:
Databricks SQL
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_ZEROeller ett användardeklarerat villkor. Dessa hanterare hanterar dessa specifika villkor.En eller flera
SQLSTATE:er som kan genereras av Databricks eller enSIGNAL-instruktion. Dessa hanterare kan hantera alla villkor som är associerade med denSQLSTATE.En generisk
SQLEXCEPTION-hanterare kan hantera alla villkor som faller underSQLEXCEPTION(allaSQLSTATEsom inte ärXX***och inte02***).En
NOT FOUNDhanterare 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änEXCEPTION-hanterare är den minst specifika.
Resultatet av en villkorshanterare är följande:
- En
EXIThanterare 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
CONTINUEhanterare kör dess -instruktion och fortsätter sedan körningen med -instruktionen efter den som aktiverade villkoret. - Om inte en hanterare
SIGNALellerRESIGNALhanterar 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:
Databricks SQL
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:
- CASE-instruktion
- CLOSE-instruktion
- BEGIN END-sammansatt sats
- FETCH-instruktion
- FOR-instruktion
- GET DIAGNOSTICS-instruktion
- IF THEN ELSE-instruktion
- ITERATE-instruktion
- LEAVE-instruktion
- LOOP-instruktion
- OPEN-instruktion
- REPEAT-instruktion
- RESIGNAL-instruktion
- SIGNAL-instruktion
- WHILE-instruktion
Lista över markörinstruktioner
Följande markörinstruktioner stöds i Databricks Runtime 18.1 och senare. Markörer deklareras i den sammansatta instruktionen.