Bagikan melalui


Pernyataan OPEN

Berlaku untuk:check ditandai ya Databricks Runtime 18.1 ke atas

Membuka kursor dan menjalankan kuerinya, memosisikannya sebelum baris pertama.

Pernyataan menjalankan OPEN kueri yang ditentukan dalam DECLARE CURSOR deklarasi, mengikat penanda parameter apa pun jika ditentukan. Setelah dibuka, kursor dapat digunakan dengan FETCH untuk mengambil baris.

Pernyataan ini hanya dapat digunakan dalam pernyataan gabungan .

Nota

Saat membuka kursor, kesalahan semantik seperti TABLE_OR_VIEW_NOT_FOUND atau COLUMN_NOT_FOUND_IN_TABLE dimunculkan jika ada. Membuka kursor juga memulai eksekusi kueri, yang dapat menimbulkan kesalahan runtime seperti DIVIDE_BY_ZERO tergantung pada berapa banyak kueri yang dijalankan.

Syntax

OPEN cursor_name [ USING { constant_expr [ AS param_name ] } [, ...] ]

Parameter-parameternya

  • cursor_name

    Nama kursor yang dideklarasikan. Kursor dapat secara opsional memenuhi syarat dengan label pernyataan gabungan untuk mereferensikan kursor dari cakupan luar (misalnya, outer_label.my_cursor).

  • USING { constant_expr [ AS param_name ] } [, ...]

    Klausa opsional untuk mengikat nilai ke penanda parameter dalam kueri kursor.

Catatan

Perilaku pengikatan parameter cocok EXECUTE IMMEDIATE:

Jika kueri kursor menimbulkan kesalahan selama eksekusi (lihat Kondisi kesalahan), kursor tetap dalam status tertutup. Membuka kursor yang tidak berada dalam cakupan menimbulkan CURSOR_NOT_FOUND. Membuka kursor yang sudah terbuka menimbulkan CURSOR_ALREADY_OPEN.

Contoh

-- Open a simple cursor without parameters
> BEGIN
    DECLARE total INT;
    DECLARE my_cursor CURSOR FOR SELECT sum(id) FROM range(10);

    OPEN my_cursor;
    FETCH my_cursor INTO total;
    VALUES (total);
    CLOSE my_cursor;
  END;
45

-- Open cursor with positional parameters
> BEGIN
    DECLARE total INT;
    DECLARE param_cursor CURSOR FOR
      SELECT sum(id) FROM range(100) WHERE id BETWEEN ? AND ?;

    OPEN param_cursor USING 10, 20;
    FETCH param_cursor INTO total;
    VALUES (total);
    CLOSE param_cursor;
  END;
165

-- Open cursor with named parameters
> BEGIN
    DECLARE min_val INT;
    DECLARE named_cursor CURSOR FOR
      SELECT min(id) FROM range(100) WHERE id >= :threshold;

    OPEN named_cursor USING 25 AS threshold;
    FETCH named_cursor INTO min_val;
    VALUES (min_val);
    CLOSE named_cursor;
  END;
25