Поделиться через


EXECUTE IMMEDIATE

Применяется к:отметка Databricks SQL отметка Databricks Runtime 14.3 и более поздних версий

Выполняет инструкцию SQL, предоставленную в виде STRING. Инструкция при необходимости передает аргументы маркерам параметров и присваивает результаты переменным.

Синтаксис

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

Для совместимости с другими SQL-диалектами, EXECUTE IMMEDIATE также поддерживает USING ( { arg_expr [ AS ] [alias] } [, ...] ).

Параметры

  • sql_string

    STRING выражение, создающее хорошо сформированную инструкцию SQL.

    Если sql_string содержит маркеры параметров, они должны быть все позиционные (?) или все именованные (:parm1).

    До Databricks Runtime 17.3 sql_string должен быть литерал или переменная. И вы не можете вложить EXECUTE IMMEDIATE инструкции.

  • INTO ( var_name [, ...] )

    При необходимости возвращает результаты одного запроса строки в переменные SQL. Если запрос не возвращает строки, результатом является NULL.

    Если инструкция не является запросом, Azure Databricks вызывает INVALID_STATEMENT_FOR_EXECUTE_INTO ошибку.

    Если запрос возвращает несколько строк, Azure Databricks вызывает ошибку ROW_SUBQUERY_TOO_MANY_ROWS .

    • var_name

      Переменная SQL. Переменная не должна ссылаться более одного раза.

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

    При необходимости, если sql_string содержит маркеры параметров, значения связываются с параметрами.

    До Databricks Runtime 17.3 arg_expr должен быть литерал или переменная.

    • alias

      Переопределяет имя, используемое для привязки arg_expr к именованному параметру-маркеру. Каждый именованный маркер параметра должен совпадать один раз. Не все arg_expr обязательно должны совпадать.

Примеры

-- 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