Bagikan melalui


Pernyataan CLOSE

Berlaku untuk:check ditandai ya Databricks Runtime 18.1 ke atas

Menutup kursor terbuka dan melepaskan sumber dayanya.

Pernyataan CLOSE menutup kursor yang sebelumnya dibuka dengan OPEN, membebaskan memori dan sumber daya yang terkait dengan tataan hasilnya. Setelah ditutup, kursor dapat dibuka kembali dengan OPEN untuk menjalankan kueri lagi dengan pengikatan parameter baru.

Pernyataan ini hanya dapat digunakan dalam pernyataan gabungan .

Syntax

CLOSE cursor_name

Parameter-parameternya

  • cursor_name

    Nama kursor terbuka. Kursor dapat secara opsional memenuhi syarat dengan label pernyataan gabungan (misalnya, outer_label.my_cursor).

Catatan

Menutup kursor yang tidak terbuka menimbulkan CURSOR_NOT_OPEN.

Kursor ditutup secara otomatis dalam skenario berikut:

  • Ketika pernyataan gabungan keluar karena pengecualian yang tidak tertangani (lihat Kondisi kesalahan).
  • Ketika handler EXIT dipicu (semua kursor dalam pernyataan senyawa dan senyawa berlapis ditutup).
  • Ketika pernyataan senyawa yang menyatakan mereka keluar secara normal.

Menutup kursor tidak memengaruhi deklarasi kursor. Nama kursor tetap berada dalam cakupan dan dapat dibuka kembali.

Contoh

-- Basic cursor lifecycle
> BEGIN
    DECLARE x INT;
    DECLARE my_cursor CURSOR FOR SELECT id FROM range(3);

    OPEN my_cursor;
    FETCH my_cursor INTO x;
    VALUES (x);
    CLOSE my_cursor;
  END;
0

-- Close cursor in handler
> BEGIN
    DECLARE x INT;
    DECLARE my_cursor CURSOR FOR SELECT id FROM range(2);

    DECLARE EXIT HANDLER FOR NOT FOUND
      BEGIN
        CLOSE my_cursor;
        VALUES ('Cursor closed on completion');
      END;

    OPEN my_cursor;
    REPEAT
      FETCH my_cursor INTO x;
    UNTIL false END REPEAT;
  END;
Cursor closed on completion

-- Reopen cursor with different parameters
> BEGIN
    DECLARE result STRING DEFAULT '';
    DECLARE x INT;
    DECLARE param_cursor CURSOR FOR SELECT id FROM range(10) WHERE id = ?;

    OPEN param_cursor USING 3;
    FETCH param_cursor INTO x;
    SET result = 'First open: ' || CAST(x AS STRING);
    CLOSE param_cursor;

    OPEN param_cursor USING 7;
    FETCH param_cursor INTO x;
    SET result = result || '; Second open: ' || CAST(x AS STRING);
    CLOSE param_cursor;

    VALUES (result);
  END;
First open: 3; Second open: 7