Sdílet prostřednictvím


EXECUTE IMMEDIATE

Platí pro:zaškrtnuto ano Databricks SQL zaškrtnuto ano Databricks Runtime 14.3 a novější

Spustí příkaz SQL zadaný jako .STRING Příkaz volitelně předá argumenty značkám parametrů a přiřadí výsledky proměnným.

Syntaxe

EXECUTE IMMEDIATE sql_string
        [ INTO var_name [, ...] ]
        [ USING { arg_expr [ AS ] [alias] } [, ...] ]

Kvůli kompatibilitě s jinými dialekty EXECUTE IMMEDIATE SQL podporuje také USING ( { arg_expr [ AS ] [alias] } [, ...] )

Parametry

  • sql_string

    Konstantní STRINGvýraz, který vytváří dobře formátovaný příkaz SQL.

    Pokud sql_string obsahuje značky parametrů, musí být všechny poziční (?) nebo všechny pojmenované (:parm1).

    Před Databricks Runtime 17.3 musí být sql_string konstantní hodnota nebo proměnná. A vy nemůžete vnořit výrazy EXECUTE IMMEDIATE.

  • INTO ( var_name [, ...] )

    Volitelně vrátí výsledky dotazu na jeden řádek do proměnných SQL. Pokud dotaz nevrátí žádné řádky, výsledek je NULL.

    Pokud příkaz není dotazem, Azure Databricks vyvolá INVALID_STATEMENT_FOR_EXECUTE_INTO chybu.

    Pokud dotaz vrátí více než jeden řádek, Azure Databricks vyvolá ROW_SUBQUERY_TOO_MANY_ROWS chybu.

    • var_name

      Proměnná SQL. Proměnná nesmí být odkazována více než jednou.

  • USING { arg_expr [ AS ] [alias] } [, ...]

    Volitelně platí, že pokud sql_string obsahuje značky parametrů, sváže hodnoty s parametry.

    • arg_expr

      Konstantní výraz, který je vázán na značku parametru. Pokud jsou značky parametrů nepojmenované, vazba je podle pozice. Pro pojmenované značky parametrů je vazba podle názvu.

    Před modulem Databricks Runtime 17.3 arg_expr musí být literálem nebo proměnnou.

    • alias

      Přepíše název použitý k vytvoření vazby arg_expr na pojmenovanou značku parametru. Každá pojmenovaná značka parametru se musí shodovat jednou. Ne všechny arg_expr se musí shodovat.

Příklady

-- A self-contained execution using a literal string
> EXECUTE IMMEDIATE 'SELECT SUM(c1) FROM VALUES(?), (?) AS t(c1)' USING 5, 6;
  11

-- A SQL string composed in a SQL variable
> DECLARE sqlStr = 'SELECT SUM(c1) FROM VALUES(?), (?) AS t(c1)';
> DECLARE arg1 = 5;
> DECLARE arg2 = 6;
> EXECUTE IMMEDIATE sqlStr USING arg1, arg2;
  11

-- Using the INTO clause
> DECLARE sum INT;
> DECLARE sqlStr = 'SELECT SUM(c1) FROM VALUES(:first), (:second) AS t(c1)';
> EXECUTE IMMEDIATE sqlStr INTO sum USING arg1, arg2;
> SELECT sum;
  11

-- Using named parameter markers
> DECLARE sum INT;
> DECLARE sqlStr = 'SELECT SUM(c1) FROM VALUES(:first), (:second) AS t(c1)';
> EXECUTE IMMEDIATE sqlStr INTO sum USING (5 AS first, arg2 AS second);
> SELECT sum;
  11

-- Using constant expressions
> DECLARE func STRING DEFAULT 'sum';
> EXECUTE IMMEDIATE 'SELECT ' || func || '(c1) FROM VALUES(:first), (:second) AS t(c1)'
  USING 5 + 7 AS first, length('hello') AS second;
 19