適用於:
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_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包含參數標記,則會將值系結至參數。在 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