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.Не удается вложить
EXECUTE IMMEDIATE
операторы.INTO ( var_name [, ...] )
При необходимости возвращает результаты одного запроса строки в переменные SQL. Если запрос не возвращает строки, результатом является
NULL
.Если инструкция не является запросом, Azure Databricks вызывает
INVALID_STATEMENT_FOR_EXECUTE_INTO
ошибку.Если запрос возвращает несколько строк, Azure Databricks вызывает ошибку ROW_SUBQUERY_TOO_MANY_ROWS .
-
Переменная SQL. Переменная не должна ссылаться более одного раза.
-
USING { arg_expr [ AS ] [alias] } [, ...]
При необходимости, если
sql_string
содержит маркеры параметров, значения связываются с параметрами.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;
> EXECUTE IMMEDIATE sqlStr INTO sum USING arg1, arg2;
> SELECT sum;
11
-- Using named parameter markers
> SET VAR 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