Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:
Databricks SQL Databricks Runtime 17.0 a vyšší
Databricks Unity Catalog
Vytvoří proceduru v katalogu Unity, která přebírá nebo upravuje argumenty, spouští sadu příkazů SQL a volitelně vrací sadu výsledků.
Syntaxe
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 }
Parametry
NEBO NAHRAĎTE
Pokud je zadáno, nahradí se procedura stejného názvu. Existující funkci nelze nahradit postupem; tím se zvýší ROUTINE_ALREADY_EXISTS. Tento parametr
IF NOT EXISTSnelze zadat pomocí parametru ; zadáním obou vyvolá INVALID_SQL_SYNTAX . CREATE_ROUTINE_WITH_IF_NOT_EXISTS_AND_REPLACE.POKUD NEEXISTUJE
Pokud je zadán, vytvoří proceduru pouze v případě, že procedura s tímto názvem ještě neexistuje. Pokud existuje procedura se stejným názvem, příkaz se ignoruje. Tento parametr
OR REPLACEnelze zadat pomocí parametru ; zadáním obou vyvolá INVALID_SQL_SYNTAX . CREATE_ROUTINE_WITH_IF_NOT_EXISTS_AND_REPLACE.-
Název procedury. Volitelně můžete kvalifikovat název procedury názvem schématu. Pokud název není kvalifikovaný, vytvoří se v aktuálním schématu trvalá procedura.
Název procedury musí být jedinečný pro všechny rutiny (procedury a funkce) ve schématu. Pokud existuje rutina se stejným názvem a
OR REPLACEnení zadána aniIF NOT EXISTSzadaná, Azure Databricks vyvolá ROUTINE_ALREADY_EXISTS. procedure_parameter
Určuje parametr procedury.
-
Název parametru musí být v rámci postupu jedinečný; jinak Azure Databricks vyvolá DUPLICATE_ROUTINE_PARAMETER_NAMES.
IN, INOUT nebo OUT
Volitelně popisuje režim parametru.
V
Definuje parametr pouze vstupní. Toto je výchozí hodnota.
INOUT
Definuje parametr, který přijímá argument input-output. Pokud se procedura dokončí bez neošetřené chyby, vrátí jako výstup konečnou hodnotu parametru.
VEN
Definuje výstupní parametr. Parametr se inicializuje
NULLa pokud se procedura dokončí bez neošetřené chyby, vrátí jako výstup konečnou hodnotu parametru.
-
Libovolný podporovaný datový typ.
VÝCHOZÍ default_expression
Volitelné výchozí nastavení, které se má použít, když vyvolání funkce nepřiřazuje argument parametru.
default_expressionmusí být přetypovatelný nadata_type. Výraz nesmí odkazovat na jiný parametr ani obsahovat poddotaz.Pokud zadáte výchozí hodnotu pro jeden parametr, musí mít všechny následující parametry také výchozí hodnotu.
parametr /> zadání jednoho vyvolá PROCEDURE_CREATION_PARAMETER_OUT_INOUT_WITH_DEFAULT .KOMENTÁŘ
Volitelný popis parametru.
commentmusí býtSTRINGliterál.
-
-
Složený příkaz SQL (
BEGIN ... END) s definicí procedury SQL.Po vytvoření procedury se ověří její syntaktická správnost. Tělo procedury není ověřeno pro sémantickou správnost, dokud se nevyvolá procedura.
charakteristický
Jedna z
SQL SECURITY INVOKERneboSQL SECURITY DEFINERaLANGUAGE SQLjsou povinná. Všechny ostatní jsou volitelné. Můžete zadat libovolný počet charakteristik v libovolném pořadí, ale každou klauzuli můžete zadat pouze jednou.JAZYK SQL
Jazyk implementace funkce.
VYVOLÁNÍ ZABEZPEČENÍ SQL
Určuje, že všechny příkazy SQL v těle procedury budou provedeny pod autoritou uživatele vyvolání procedury.
Při řešení relací a rutin v těle procedury Azure Databricks používá aktuální katalog a aktuální schéma v době vyvolání.
Informace o chování autorizovaného uživatele a uživatele relace v těle procedury a vnořených voláních najdete v části Autorizovaný uživatel a uživatel relace .
DEFINICE ZABEZPEČENÍ SQL
Platí pro:
Databricks SQLUrčuje, že všechny příkazy SQL v těle procedury se vždy provádějí pod autoritou vlastníka (definer) procedury bez ohledu na to, který uživatel vyvolá proceduru. To znamená, že vlastník je autorizovaným uživatelem pro tělo. Invoker vyžaduje
EXECUTEpouze oprávnění pro proceduru. Všechny kontroly přístupu pro vztahy, rutiny a další objekty odkazované z těla se vyhodnocují vůči autorizovanému uživateli.Při řešení relací a rutin v těle procedury Azure Databricks používá katalog a schéma, které byly aktuální v době vytvoření procedury. Objekty v oboru relace invokeru, jako jsou dočasná zobrazení, dočasné tabulky, proměnné relace a funkce s oborem relace, jsou vyloučeny z cesty hledání překladu uvnitř těla, takže na tyto objekty nelze odkazovat jejich nekvalifikovanými názvy. Zůstanou přístupné, pokud jsou odkazovány pomocí kvalifikátoru
sessionschématu, napříkladsession.object_namesystem.session.object_name.Konfigurace SQL (například výchozí časové pásmo), které ovlivňují sémantiku příkazů v těle,
ANSI_MODEse zachytávají také při vytváření a používají se při každém vyvolání procedury bez ohledu na nastavení relace invokeru.V těle
SQL SECURITY DEFINERcurrent_catalog vrátí katalog, který byl aktuální při vytvoření procedury, a current_schema a current_database vrátit schéma, které bylo aktuální při vytvoření procedury.SQL SECURITY DEFINERnezmění hodnotu session_user: bude nadále vracet uživatele, který vydalCALL. Informace o tom, jak se autorizovaný uživatel a uživatel relace liší v těleSQL SECURITY DEFINER, najdete v části Autorizovaný uživatel a uživatel relace.NEDETERMINISTICKÝ
Procedura se předpokládá nedeterministicky, což znamená, že při každém vyvolání může vracet různé výsledky, i když je volána se stejnými argumenty.
PROCEDURA_KOMENTÁŘ
Komentář k postupu.
procedure_commentmusí býtSTRINGliterál. Výchozí hodnota jeNULL.výchozí kolace default_collation_name
Platí pro:
Kontrola SQL Databricks
Databricks Runtime 17.1 a vyššíNastaví výchozí kolaci procedury. Výchozí kolace procedury se používá jako výchozí kolace pro parametry procedury, výrazy pro parametry,
DEFAULTSTRINGzadané místní proměnné deklarované v těle procedury aSTRINGliterály použité v těle procedury.V Databricks Runtime 17.1 prostřednictvím Databricks Runtime 18.2
default_collation_namemusí býtUTF8_BINARY. Tato klauzule je povinná, pokud schéma, ve kterém je procedura vytvořena, má jinou výchozí kolaci nežUTF8_BINARY.Platí pro:
Databricks SQL
Databricks Runtime 18 a vyššídefault_collation_namemůže být libovolný podporovaný název kolace.Pokud není zadáno, výchozí kolace je odvozena ze schématu, ve kterém je procedura vytvořena.
UPRAVÍ DATA SQL.
Předpokládá se, že se jedná o úpravu dat SQL.
Běžné chybové podmínky
- 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
- NEPODPOROVANÉ_UČENÍ_KOLACE
Příklady
-- 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');
Související články
- ZAVOLAT
- DROP PROCEDURE (zrušit proceduru)
- ZOBRAZIT POSTUPY
- POPIS POSTUPU
- GRANT
- REVOKE