Freigeben über


EXECUTE IMMEDIATE

Gilt für:Häkchen ja Databricks SQL Häkchen gesetzt ja Databricks Runtime 14.3 und höher

Führt eine SQL-Anweisung aus, die als STRING bereitgestellt wird. Die Anweisung übergibt optional Argumente an Parametermarkierungen und weist die Ergebnisse Variablen zu.

Syntax

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

Für die Kompatibilität mit anderen SQL-Dialekten unterstützt EXECUTE IMMEDIATE auch USING ( { arg_expr [ AS ] [alias] } [, ...] ).

Parameter

  • sql_string

    Ein STRINGkonstanter Ausdruck, der eine wohlgeformte SQL-Anweisung erzeugt.

    Wenn sql_string Parametermarkierungen enthalten sind, müssen sie entweder alle positionale (?) oder alle benannte (:parm1) sein.

    Vor Databricks Runtime 17.3 sql_string muss ein Literal oder eine Variable sein. Und Sie können EXECUTE IMMEDIATE-Anweisungen nicht verschachteln.

  • INTO ( var_name [, ...] )

    Gibt optional die Ergebnisse einer einzelnen Zeilenabfrage in SQL-Variablen zurück. Wenn die Abfrage keine Zeilen zurückgibt, ist das Ergebnis NULL.

    Wenn es sich bei der Anweisung nicht um eine Abfrage handelt, löst Azure Databricks den Fehler INVALID_STATEMENT_FOR_EXECUTE_INTO aus.

    Wenn die Abfrage mehrere Zeilen zurückgibt, löst Azure Databricks den Fehler ROW_SUBQUERY_TOO_MANY_ROWS aus.

    • var_name

      Eine SQL-Variable. Auf eine Variable kann nicht mehrmals verwiesen werden.

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

    Optional: Wenn sql_string Parametermarkierungen enthält, werden Werte an die Parameter gebunden.

    • arg_expr

      Ein konstanter Ausdruck , der an eine Parametermarkierung gebunden wird. Wenn die Parametermarkierungen unbenannt sind, erfolgt die Bindung nach Position. Bei benannten Parametermarkierungen erfolgt die Bindung nach Name.

    Vor Databricks Runtime 17.3 arg_expr muss ein Literal oder eine Variable vorhanden sein.

    • alias

      Überschreibt den Namen, der zum Binden von arg_expr an einen benannten Parametermarker verwendet wird. Jeder benannte Parametermarker benötigt eine Übereinstimmung. Nicht alle arg_expr erfordern Übereinstimmungen.

Beispiele

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