Bagikan melalui


EXECUTE IMMEDIATE

Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime 14.3 ke atas

Menjalankan pernyataan SQL yang disediakan sebagai STRING. Pernyataan secara opsional meneruskan argumen ke penanda parameter dan menetapkan hasilnya ke variabel.

Sintaks

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

Untuk kompatibilitas dengan dialek SQL lainnya, EXECUTE IMMEDIATE juga mendukung USING ( { arg_expr [ AS ] [alias] } [, ...] )

Parameter-parameternya

  • sql_string

    Ekspresi STRINGkonstanta, menghasilkan pernyataan SQL yang terbentuk dengan baik.

    Jika sql_string berisi penanda parameter, penanda yang tersedia harus semuanya bersifat posisional (?) atau semuanya dinamakan (:parm1).

    Sebelum Databricks Runtime 17.3 sql_string harus berupa literal atau variabel. Anda tidak dapat menumpuk EXECUTE IMMEDIATE pernyataan.

  • INTO ( var_name [, ...] )

    Secara opsional mengembalikan hasil kueri baris tunggal ke dalam variabel SQL. Jika kueri tidak mengembalikan baris hasilnya adalah NULL.

    Jika pernyataan bukan kueri, Azure Databricks menghasilkan INVALID_STATEMENT_FOR_EXECUTE_INTO kesalahan.

    Jika kueri mengembalikan lebih dari satu baris, Azure Databricks menimbulkan kesalahan ROW_SUBQUERY_TOO_MANY_ROWS .

    • var_name

      Variabel SQL. Variabel mungkin tidak dirujuk lebih dari sekali.

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

    Opsional, jika sql_string berisi penanda parameter, mengikat nilai ke parameter.

    • arg_expr

      Ekspresi konstanta yang mengikat ke penanda parameter. Jika penanda parameter tidak disebutkan namanya, pengikatannya berdasarkan posisi. Untuk penanda parameter bernama, pengikatan adalah berdasarkan nama.

    Sebelum Databricks Runtime 17.3, arg_expr harus berupa nilai literal atau variabel.

    • alias

      Mengganti nama yang digunakan untuk menghubungkan arg_expr dengan penanda parameter bernama. Setiap penanda parameter bernama harus dicocokkan sekali. Tidak semua arg_expr harus dicocokkan.

Contoh

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