Teilen ü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 STRING-Literal oder eine Variable, mit dem bzw. der eine wohlgeformte SQL-Anweisung generiert wird.

    EXECUTE IMMEDIATE-Anweisungen können nicht geschachtelt werden.

  • 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 Literal oder eine Variable, das bzw. die an eine Parametermarkierung gebunden wird. Wenn die Parametermarkierungen unbenannt sind, erfolgt die Bindung nach Position. Bei benannten Parametermarkierungen erfolgt die Bindung nach Name.

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