تعيين متغير

ينطبق على: وضع علامة Databricks SQL وضع علامة Databricks Runtime 14.1 وما فوق

تعديل قيمة متغير مؤقت واحد أو أكثر.

لتعيين معلمة تكوين، استخدم SET.

بناء الجملة

SET { VAR | VARIABLE } { variable_name = { expression | DEFAULT } } [, ...]

SET { VAR | VARIABLE } ( variable_name [, ...] ) = ( query ) }

المعلمات

  • variable_name

    تحديد اسم متغير مؤقت.

    إذا تعذر العثور على المتغير، فإن Azure Databricks يثير خطأ UNRESOLVED_VARIABLE .

    إذا قمت بتحديد متغيرات مكررة، فإن Azure Databricks يثير خطأ DUPLICATE_ASSIGNMENTS .

  • تعبير

    أي تعبير جيد التكوين يحسب قيمة المتغير الجديد.

  • افتراضي

    استخدم التعبير الافتراضي للمتغير أو NULL إذا لم يتم تحديد أي شيء لحساب قيمة المتغير الجديد.

  • الاستعلام

    أي استعلام جيد التكوين مع القيود التالية:

    • يرجع الاستعلام صفا واحدا على الأكثر (ROW_SUBQUERY_TOO_MANY_ROWS).
    • يتطابق عدد الأعمدة التي تم إرجاعها بواسطة الاستعلام مع عدد أسماء المتغيرات المحددة (ASSIGNMENT_ARITY_MISMATCH).
    • يمكن تحويل كل عمود تم إرجاعه إلى متغير في موضع المطابقة (CAST_INVALID_INPUT).

    إذا لم يرجع الاستعلام أية صفوف يقوم Azure Databricks بتعيين كافة المتغيرات المحددة إلى NULL.

    يمكنك استخدام DEFAULT الكلمة الأساسية بدلا من تعبير قائمة تحديد لتعيين متغير إلى الافتراضي الخاص به.

الأمثلة

> DECLARE VARIABLE myvar1 INT DEFAULT 7;
> DECLARE VARIABLE myvar2 STRING DEFAULT ‘hello’;

-- Set a SQL variable to a value
> SET VAR myvar1 = 5;
> VALUES (myvar1);
  5

-- Set a SQL variable back to DEFAULT
> SET VARIABLE myvar1 = DEFAULT;
> VALUES (myvar1);
  7

-- Set a SQL variable to the result of a scalar subquery.
> SET VARIABLE myvar1 = (SELECT max(c1) FROM VALUES(1), (2) AS T(c1));
> VALUES (myvar1);
  2

-- Set multiple variables from a query
> SET VAR (myvar1, myvar2) = (VALUES(10, 'world'));
> VALUES (myvar1, myvar2);
  10   world

-- Set multiple variables from expressions
> SET VAR myvar1 = 11, myvar2 = 'hello';
> VALUES (myvar1, myvar2);
  11   hello

-- Set multiple variables based on a query
> SET VARIABLE (myvar1, myvar2)
    = (SELECT max(c1), CAST(min(c1) AS STRING) FROM VALUES(1), (2) AS T(c1));
> VALUES (myvar1, myvar2);
  2    1

-- Assign NULLs on empty query
> SET VAR (myvar1, myvar2)
    = (SELECT max(c1), CAST(min(c1) AS STRING) FROM VALUES(1), (2) AS T(c1) HAVING max(c1) = 0);
> VALUES (myvar1, myvar2);
  NULL  NULL

-- Using a variable with an IDENTIFIER clause
> DECLARE colname STRING;
> SET VAR colname = 'c1';
> SELECT IDENTIFIER(colname) FROM VALUES(1, 2) AS T(c1, c2);
  1

> SET VARIABLE colname = 'c2';
> SELECT IDENTIFIER(colname) FROM VALUES(1, 2) AS T(c1, c2);
  2

-- Variable defaults are recomputed
> DECLARE VARIABLE val DEFAULT RAND();
> SELECT val;
  0.1234...

> SET VARIABLE val = DEFAULT;
> SELECT val;
  0.9876...