적용 대상:
Databricks SQL
Databricks Runtime 14.3 이상
로 제공된 STRINGSQL 문을 실행합니다.
이 문은 필요에 따라 매개 변수 표식에 인수를 전달하고 결과를 변수에 할당합니다.
구문
EXECUTE IMMEDIATE sql_string
[ INTO var_name [, ...] ]
[ USING { arg_expr [ AS ] [alias] } [, ...] ]
다른 SQL 언어와의 호환성을 위해 EXECUTE IMMEDIATE는 USING ( { arg_expr [ AS ] [alias] } [, ...] )도 지원합니다.
매개 변수
sql_stringSTRING올바른 형식의 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 오류가 발생합니다.
-
SQL 변수입니다. 변수를 두 번 이상 참조할 수 없습니다.
-
USING { arg_expr [ AS ] [alias] } [, ...]sql_string이 매개 변수 표식을 포함하는 경우, 필요에 따라 매개 변수에 값을 바인딩합니다.arg_expr상수 식이 매개 변수 표식에 바인딩됩니다. 매개 변수 표식이 명명되지 않은 경우 바인딩은 위치별입니다. 명명된 매개 변수 표식의 경우 바인딩은 이름으로 지정됩니다.
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