Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:
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
-
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.
- constant_expr: Ekspresi konstanta (harfiah atau variabel) untuk mengikat penanda parameter. Ekspresi harus dapat ditransmisikan ke jenis yang diharapkan oleh kueri.
-
AS param_name: Opsional. Untuk penanda parameter bernama (
:param_name), ini menentukan parameter mana yang akan diikat. Jika tidak ditentukan untuk penanda parameter yang tidak disebutkan namanya (?), parameter terikat oleh posisi.
Catatan
Perilaku pengikatan parameter cocok EXECUTE IMMEDIATE:
- Semua penanda parameter dalam kueri harus terikat.
- Untuk penanda parameter bernama (
:name),AS param_nameklausul menentukan pengikatan. - Untuk penanda parameter yang tidak disebutkan namanya (
?), ekspresi terikat dalam urutan yang ditentukan.
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