Sdílet prostřednictvím


Skriptování SQL

Platí pro:zaškrtnuto jako ano Databricks SQL zaškrtnuto jako ano Databricks Runtime 16.3 a vyšší

Pomocí standardní syntaxe skriptování sql/PSM můžete použít výkonnou procedurální logiku. Každý skript SQL se skládá z složeného příkazu bloku (BEGIN ... END). Složený příkaz začíná částí, která deklaruje místní proměnné, kurzory, uživatelem definované podmínky a obslužné rutiny podmínek, které se používají k zachycení výjimek. Následuje tělo složeného výrazu, které se skládá z:

  • Příkazy řízení toku zahrnují smyčky nad predikátovými výrazy, FOR smyčky nad výsledky dotazu, podmíněnou logiku, jako je IF a CASE, a prostředky k přerušení smyček, jako je LEAVE a ITERATE.
  • Zpracování kurzoru pomocí příkazů OPEN, FETCH a CLOSE (Databricks Runtime 18.1 a vyšší).
  • Příkazy DDL, jako jsou ALTER, CREATE, DROP.
  • Příkazy DCL (Data Control), jako jsou GRANT a REVOKE.
  • Příkazy DML INSERT, UPDATE, DELETEa MERGE.
  • Dotazy, které vrací sady výsledků vyvolavateli skriptu.
  • SET příkazy k nastavení místních proměnných a proměnných sezení.
  • Příkaz EXECUTE IMMEDIATE.
  • Vnořené složené příkazy, které poskytují vnořené obory pro proměnné, kurzory, podmínky a obslužné rutiny podmínky.

Předávání dat mezi vyvolávačem a složeným příkazem

Existují dva způsoby předávání dat do a ze skriptu SQL:

  • Pomocí relačních proměnných můžete přenášet skalární hodnoty nebo malé sady polí či map z jednoho skriptu SQL do jiného.
  • Pomocí značek parametrů můžete předat skalární hodnoty nebo malé sady polí nebo mapovat data z widgetu poznámkového bloku, Pythonu nebo jiného jazyka do skriptu SQL.

Rozsah proměnných a kurzorů

Proměnné deklarované v rámci složeného příkazu lze odkazovat v libovolném výrazu v rámci složeného příkazu. Databricks řeší identifikátory od nejvnitřnějšího rozsahu ven podle pravidel popsaných v Name Resolution. Volitelný složený příkaz popisky můžete použít k odstranění nejednoznačnosti duplicitních názvů proměnných .

Kurzory deklarované v rámci složeného příkazu lze odkazovat v OPEN, FETCHa CLOSE příkazy v rámci složeného příkazu. Podobně jako proměnné můžete použít volitelné popisky složených příkazů k nejednoznačnosti duplicitních názvů kurzorů v vnořených oborech.

Zpracování podmínek

Skriptování SQL podporuje obslužné rutiny EXIT podmínek, které se používají k zachycení a zpracování výjimek složeného příkazu nebo CONTINUE spuštění (Databricks Runtime 18.1 a vyšší). V obslužné rutině podmínky můžete REZIGNAL původní výjimku, SIGNAL novou výjimku, nebo ukončit složený příkaz bez výjimky.

Obslužné rutiny pro podmínky lze definovat, které zpracovávají tři odlišné třídy podmínek:

  • Jedna nebo více pojmenovaných podmínek, které mohou být konkrétní třídou chyb definovanou službou Databricks, jako je například DIVIDE_BY_ZERO nebo podmínka deklarovaná uživatelem. Tyto obslužné rutiny zpracovávají tyto konkrétní podmínky.

  • Jeden nebo více SQLSTATEs, které mohou být vyvolány Databricks nebo uživatelským příkazem SIGNAL. Tyto obslužní prvky mohou zpracovat jakoukoli podmínku přidruženou k této SQLSTATE.

  • Obecná obslužná rutina SQLEXCEPTION může zachytit všechny podmínky spadající do SQLEXCEPTION (všechny SQLSTATE, které nejsou XX*** ani 02***).

  • Obslužná NOT FOUND rutina zachytí všechny podmínky s třídou '02xxx'SQLSTATE, která zahrnuje CURSOR_NO_MORE_ROWS podmínku vyvolanou při načítání za koncem sady výsledků kurzoru (Databricks Runtime 18.1 a vyšší).

Následující jsou použity k určení, která obslužná rutina podmínky se aplikuje na výjimku. Tato obslužná rutina se nazývá nejvhodnější obslužná rutina:

  • Obslužná rutina podmínky se nemůže použít na žádný příkaz definovaný ve vlastním těle nebo na tělo jakékoli obslužné rutiny podmínky deklarované ve stejném složeném příkazu.

  • Příslušné obslužné rutiny pro podmínky definované v nejvnitřnějším složeném příkazu, kde byla výjimka vyvolána, jsou vhodné.

  • Pokud je k dispozici více než jedna vhodná obslužná rutina, nejvíce vhodná je nejkonkrétnější obslužná rutina. Například obslužná rutina v pojmenované podmínce je konkrétnější než jedna v pojmenované SQLSTATE. Obecná obslužná rutina EXCEPTION je nejméně specifická.

Výsledek obslužné rutiny podmínky je následující:

  • Obslužná EXIT rutina spustí svůj příkaz a potom ukončí složený příkaz, který deklaroval obslužnou rutinu. Všechny kurzory otevřené v rámci složeného příkazu a vnořené složené příkazy jsou implicitně uzavřeny.
  • Obslužná CONTINUE rutina spustí svůj příkaz a pak pokračuje v provádění příkazem za příkazem, který vyvolal podmínku.
  • Pokud obslužná rutina SIGNALnebo RESIGNALnevyvolá vlastní podmínku, výsledkem obslužné rutiny je provedení následujícího příkazu, jenž přijde po složeném příkazu, který tuto obslužnou rutinu definoval.

Uložené procedury SQL

Platí pro: Označeno jako ano Databricks SQL Označeno jako ano Databricks Runtime 17.0 a novější

Pomocí příkazu CREATE PROCEDURE můžete zachovat skript SQL v katalogu Unity. Pak můžete GRANT umožnit přístup k postupu jiným uživatelům. Tyto subjekty pak mohou příkaz CALL použít k vyvolání procedury.

Seznam příkazů pro řízení toku

Následuje seznam podporovaných příkazů toku řízení:

Seznam příkazů kurzoru

Následující příkazy kurzoru jsou podporovány v Databricks Runtime 18.1 a vyšší. Kurzory jsou deklarovány ve složené příkazu.