Delen via


EXECUTE IMMEDIATE

Van toepassing op:vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime 14.3 en hoger

Voert een SQL-instructie uit die is opgegeven als een STRING. De instructie geeft eventueel argumenten door aan parametermarkeringen en wijst de resultaten toe aan variabelen.

Syntaxis

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

Voor compatibiliteit met andere SQL-dialecten ondersteunt EXECUTE IMMEDIATE ook USING ( { arg_expr [ AS ] [alias] } [, ...] )

Parameters

  • sql_string

    Een STRINGconstante expressie die een goed opgemaakte SQL-instructie produceert.

    Als sql_string parameteraanduidingen bevat, moeten ze allemaal positioneel (?) of allemaal benoemd (:parm1) zijn.

    Vóór Databricks Runtime 17.3 sql_string moet een letterlijke of variabele zijn. En u kunt instructies niet nesten EXECUTE IMMEDIATE.

  • INTO ( var_name [, ...] )

    Retourneert desgewenst de resultaten van één rijquery in SQL-variabelen. Als de query geen rijen retourneert, is NULLhet resultaat.

    Als de instructie geen query is, genereert INVALID_STATEMENT_FOR_EXECUTE_INTO Azure Databricks een fout.

    Als de query meer dan één rij retourneert, genereert Azure Databricks ROW_SUBQUERY_TOO_MANY_ROWS fout.

    • var_name

      Een SQL-variabele. Er kan niet meer dan één keer naar een variabele worden verwezen.

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

    Als sql_string optioneel parametermarkeringen bevat, worden waarden aan de parameters gekoppeld.

    • arg_expr

      Een constante expressie die wordt gekoppeld aan een parametermarkering. Als de parametermarkeringen geen naam hebben, is de binding op positie. Voor benoemde parametermarkeringen is binding op naam.

    Vóór Databricks Runtime 17.3 arg_expr moet een letterlijke of variabele zijn.

    • alias

      Hiermee wordt de naam overschreven die is gebruikt om arg_expr aan een benoemde parametermarker te koppelen. Elke benoemde parametermarkering moet eenmaal worden vergeleken. Niet alle arg_expr moeten overeenkomen.

Voorbeelden

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