Sdílet prostřednictvím


ZAVOLAT

Důležité

Tato funkce je ve verzi Public Preview.

Platí pro:označeno jako ano Databricks SQL označeno jako ano Databricks Runtime 17.0 a výše

Vyvolá uloženou proceduru podle názvu a předá argumenty do a z procedury.

Volání procedur lze vnořit až do 64 úrovní.

Syntaxe

CALL procedure_name( [ argument [, …] ]
                     [ namedParameter => argument ] [, ...] )

Parametry

  • procedure_name

    Název procedury, která se má vyvolat. Název procedury může být volitelně kvalifikovaný názvem schématu. Pokud název není kvalifikovaný, postup se vyřeší v aktuálním schématu. Pokud procedura neexistuje, vyvolá se ROUTINE_NOT_FOUND chyba.

  • argument

    Pro argumenty přiřazené k IN parametrům může být použit jakýkoli výraz takového typu, který lze přetypovat na tento parametr, nebo klíčové slovo DEFAULT. U parametrů OUT a INOUT musí být argumentem proměnná relace nebo místní proměnná.

    Pokud procedura selže, hodnoty argumentů OUT a INOUT parametrů zůstanou beze změny.

    Poznámka:

    Argument musí odpovídat datovému typu parametru. To zahrnuje zadání, například: DATE'2015-01-01' místo '2015-01-01' pro parametr DATE.

  • namedParameter

    Nekvalifikovaný název parametru, ke kterému argExpr je přiřazen.

Počet argumentů nesmí být větší než počet parametrů zadaných pro proceduru. Pokud zadáte méně argumentů, než jsou parametry, musí být parametry definovány s DEFAULT hodnotami.

Příklady

> CREATE OR REPLACE PROCEDURE area_of_rectangle
     (IN x INT, IN y INT, OUT area INT, INOUT acc INT)
    LANGUAGE SQL
    SQL SECURITY INVOKER
    AS BEGIN
      SET area = x * y;
      SET acc = acc + area;
      SELECT 'Area of rectangle is: ' || area;
    END;

-- Session varables to handle OUT and INOUT parameters
> DECLARE area INT;
> DECLARE acc INT DEFAULT 10;

-- Invocation by position
> CALL area_of_rectangle(5, 10, area, acc);
  Area of rectangle is: 50
> SELECT area, acc;
  area  acc
  —---  —--
    50   60

-- Invocation by name
> CALL area_of_rectangle(y => 10, x => 5, area => area, acc => acc);
  Area of rectangle is: 50
> SELECT area, acc;
  area  acc
  —---  —--
    50  120