Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:
a Databricks SQL Databricks Runtime 17.0 és újabb
csak Unity Catalog esetén
Létrehoz egy eljárást a Unity Katalógusban, amely argumentumokat vesz fel vagy módosít, SQL-utasítások készletét hajtja végre, és opcionálisan eredményhalmazt ad vissza.
Szemantika
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 }
Paraméterek
CSERÉLJE LE
Ha meg van adva, az azonos nevű eljárás helyébe lép. A meglévő függvények nem helyettesíthetők eljárásokkal; ezzel ROUTINE_ALREADY_EXISTS. Ezt a paramétert
IF NOT EXISTSnem adhatja meg ; mindkét emelés INVALID_SQL_SYNTAX megadásával . CREATE_ROUTINE_WITH_IF_NOT_EXISTS_AND_REPLACE.HA NEM LÉTEZIK
Ha meg van adva, csak akkor hozza létre az eljárást, ha egy ilyen nevű eljárás még nem létezik. Ha létezik egy azonos nevű eljárás, a rendszer figyelmen kívül hagyja az utasítást. Ezt a paramétert
OR REPLACEnem adhatja meg ; mindkét emelés INVALID_SQL_SYNTAX megadásával . CREATE_ROUTINE_WITH_IF_NOT_EXISTS_AND_REPLACE.-
Az eljárás neve. Az eljárás nevét igény szerint sémanévvel is minősítheti. Ha a név nincs minősítve, az állandó eljárás az aktuális sémában jön létre.
Az eljárás nevének egyedinek kell lennie a séma összes rutinja (eljárása és függvénye) esetében. Ha egy azonos nevű rutin létezik, és nincs megadva
OR REPLACE,IF NOT EXISTSAzure Databricks ROUTINE_ALREADY_EXISTS. procedure_parameter
Az eljárás paraméterét adja meg.
-
A paraméter nevének egyedinek kell lennie az eljáráson belül; ellenkező esetben Azure Databricks DUPLICATE_ROUTINE_PARAMETER_NAMES.
IN, INOUT vagy OUT
Opcionálisan a paraméter módját írja le.
BEN
Csak bemeneti paramétert határoz meg. Ez az alapértelmezett érték.
INOUT
Egy bemeneti-kimeneti argumentumot elfogadó paramétert határoz meg. Ha az eljárás kezeletlen hiba nélkül fejeződik be, kimenetként a végső paraméterértéket adja vissza.
KI
Kimeneti paramétert határoz meg. A paraméter inicializálva
NULLvan, és ha az eljárás kezeletlen hiba nélkül fejeződik be, a végső paraméterértéket kimenetként adja vissza.
-
Bármilyen támogatott adattípus.
ALAPÉRTELMEZETT default_expression
Nem kötelező alapértelmezett érték, amelyet akkor kell használni, ha egy függvényhívás nem rendel argumentumot a paraméterhez.
default_expressionparaméternek rendelhetőnek kell lennie típussádata_type. A kifejezés nem hivatkozhat másik paraméterre, és nem tartalmazhat al lekérdezést.Ha egy paraméterhez alapértelmezett értéket ad meg, az alábbi paramétereknek is alapértelmezettnek kell lenniük.
DEFAULTnem támogatottakOUTvagyINOUTparaméterek; az egyik megadása PROCEDURE_CREATION_PARAMETER_OUT_INOUT_WITH_DEFAULT.Megjegyzés megjegyzés
A paraméter opcionális leírása.
commentegy literál kell, hogy legyenSTRING.
-
-
Sql-összetett utasítás (
BEGIN ... END) az SQL-eljárás definíciójával.Az eljárás létrehozásakor a rendszer ellenőrzi a szintaktikai helyességet. Az eljárás törzsének szemantikai helyességét nem ellenőrzik, amíg meg nem hívják az eljárást.
jellemző
Az egyik
SQL SECURITY INVOKERvagySQL SECURITY DEFINER, ésLANGUAGE SQLkötelező. A többi nem kötelező. Tetszőleges számú jellemzőt tetszőleges sorrendben megadhatja, de mindegyik záradékot csak egyszer adhatja meg.LANGUAGE SQL
A függvény implementálásának nyelve.
SQL SECURITY INVOKER
Megadja, hogy az eljárás törzsében található SQL-utasítások az eljárást megadó felhasználó felügyelete alatt legyenek végrehajtva.
Az eljárás törzsén belüli kapcsolatok és rutinok feloldásakor Azure Databricks az aktuális katalógust és az aktuális sémát használja a meghívás idején.
Az engedélyezett felhasználó és a munkamenet-felhasználó hogyan viselkedik az eljárástörzsekben és a beágyazott hívásokban.
SQL SECURITY DEFINER
A következőkre vonatkozik:
Databricks SQLMeghatározza, hogy az eljárás törzsében található SQL-utasítások mindig az eljárás tulajdonosának (definiálójának) felügyelete alatt legyenek végrehajtva, függetlenül attól, hogy melyik felhasználó hívja meg az eljárást. Vagyis a tulajdonos a szervezet jogosult felhasználója . A meghívó csak az
EXECUTEeljáráshoz szükséges jogosultságot igényli; a rendszer kiértékeli a törzsből hivatkozott kapcsolatok, rutinok és egyéb objektumok hozzáférés-ellenőrzését a jogosult felhasználóval szemben.Az eljárás törzsén belüli kapcsolatok és rutinok feloldásakor Azure Databricks az eljárás létrehozásakor aktuális katalógust és sémát használja. A meghívó munkamenet-hatókörű objektumai, például az ideiglenes nézetek, az ideiglenes táblák, a munkamenet-változók és a munkamenet-hatókörű függvények ki vannak zárva a feloldási keresési útvonalból a törzsen belül, így nem hivatkozhatnak rájuk a nem minősített neveik. A séma-minősítővel
sessionvaló hivatkozáskor például elérhetők maradnak.session.object_namesystem.session.object_nameAz SQL-konfigurációk (például az alapértelmezett időzóna), amelyek befolyásolják a törzsben lévő utasítások szemantikáját,
ANSI_MODEa létrehozáskor is rögzítve lesznek, és az eljárás minden meghívása során használhatók, függetlenül az meghívó munkamenet-beállításaitól.Egy
SQL SECURITY DEFINERtörzsben current_catalog az eljárás létrehozásakor aktuális katalógust adja vissza, és current_schema és current_database az eljárás létrehozásakor aktuális sémát adja vissza.SQL SECURITY DEFINERnem módosítja a session_user értékét: továbbra is visszaadja azt a felhasználót, aki aCALL. Az engedélyezett felhasználó és a munkamenet-felhasználó különbségét a törzsön belül tekinti megSQL SECURITY DEFINER.NEM MEGHATÁROZOTT
Az eljárás nemdeterminisztikusnak minősül, ami azt jelenti, hogy az egyes meghívások különböző eredményeket adhatnak vissza, még akkor is, ha ugyanazokkal az argumentumokkal hívják meg.
MEGJEGYZÉS procedure_comment
Megjegyzés az eljáráshoz.
procedure_commentkell, hogySTRINGliterál legyen. Az alapértelmezett érték aNULL.ALAPÉRTELMEZETT BETŰREND default_collation_name
A következőre vonatkozik:
Databricks SQL
Databricks Runtime 17.1 és újabbBeállítja az eljárás alapértelmezett rendezést. Az eljárás alapértelmezett rendezése az eljárásparaméterek, a paraméterek kifejezései,
DEFAULTSTRINGaz eljárástörzsben deklarált beírt helyi változók ésSTRINGaz eljárástörzsben használt literálok alapértelmezett rendezése.A Databricks Runtime 17.1-ben a Databricks Runtime 18.2-nek
default_collation_namekell lennieUTF8_BINARY. Ez a záradék kötelező, ha az eljárás alapjául szolgáló séma nem alapértelmezett rendezésselUTF8_BINARYrendelkezik.A következőre vonatkozik:
Databricks SQL
Databricks Runtime 18 vagy újabbdefault_collation_namebármely támogatott rendezési név lehet.Ha nincs megadva, az alapértelmezett rendezés abból a sémából származik, amelyben az eljárás létrejön.
SQL-ADATOK MÓDOSÍTÁSA
A rendszer feltételezi, hogy egy eljárás módosítja az SQL-adatokat.
Gyakori hibafeltételek
- 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
- UNSUPPORTED_PROCEDURE_COLLATION
Példák
-- 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');