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
Mengambil baris berikutnya dari kursor terbuka ke dalam variabel.
Pernyataan mengambil FETCH satu baris sekaligus dari kumpulan hasil kursor dan menetapkan nilai kolom ke variabel yang ditentukan. Jika tidak ada lagi baris yang tersedia, kondisi CURSOR_NO_MORE_ROWS dinaikkan (SQLSTATE '02000').
Pernyataan ini hanya dapat digunakan dalam pernyataan gabungan .
Nota
Untuk FETCH, kesalahan transmisi (misalnya, DATATYPE_MISMATCH) dapat dinaikkan saat menetapkan nilai kolom ke variabel. Kesalahan runtime seperti DIVIDE_BY_ZERO juga dapat terjadi dan tidak terkait dengan baris yang diambil, karena sifat pemrosesan SQL yang berorientasi pada set.
Syntax
FETCH [ [ NEXT ] FROM ] cursor_name INTO variable_name [, ...]
Parameter-parameternya
-
Nama kursor terbuka. Kursor dapat secara opsional memenuhi syarat dengan label pernyataan gabungan (misalnya,
outer_label.my_cursor). NEXT FROMKata kunci opsional.
NEXTdanFROMmerupakan gula sintaktik dan tidak mempengaruhi perilaku. Hanya pengambilan penerusan yang didukung.-
Variabel lokal atau sesi untuk menerima nilai kolom. Jumlah variabel harus cocok dengan jumlah kolom dalam tataan hasil kursor, dengan satu pengecualian; jika tidak , ASSIGNMENT_ARITY_MISMATCH dinaikkan:
- Jika tepat satu variabel ditentukan dan merupakan
STRUCTjenis, dan kursor mengembalikan beberapa kolom, nilai kolom ditetapkan ke bidang struct berdasarkan posisi.
Jenis data kolom harus kompatibel dengan variabel target (atau bidang struct) sesuai dengan aturan penetapan penyimpanan.
- Jika tepat satu variabel ditentukan dan merupakan
Catatan
Ketika tidak ada lagi baris yang tersedia, FETCH menaikkan kondisi CURSOR_NO_MORE_ROWS (SQLSTATE '02000'). Ini adalah kondisi penyelesaian, bukan pengecualian: ini tidak membatalkan eksekusi. Penghandel NOT FOUND atau CURSOR_NO_MORE_ROWS dapat memprosesnya; NOT FOUND menangkap semua kondisi SQLSTATE '02xxx' .
Mengambil dari kursor yang tidak terbuka menimbulkan CURSOR_NOT_OPEN. Kompatibilitas jenis mengikuti aturan penetapan penyimpanan: jenis yang tidak kompatibel menimbulkan kesalahan DATATYPE_MISMATCH ; cast implisit diterapkan jika memungkinkan.
Variabel dapat berupa variabel lokal yang dideklarasikan dalam pernyataan gabungan atau variabel sesi yang dibuat dengan DECLARE VARIABLE pada tingkat sesi.
Contoh
-- Basic fetch into variables
> BEGIN
DECLARE x INT;
DECLARE y STRING;
DECLARE my_cursor CURSOR FOR
SELECT id, 'row_' || id FROM range(3);
OPEN my_cursor;
FETCH my_cursor INTO x, y;
VALUES (x, y);
CLOSE my_cursor;
END;
0|row_0
-- Fetch multiple rows with REPEAT loop
> BEGIN
DECLARE x INT;
DECLARE done BOOLEAN DEFAULT false;
DECLARE total INT DEFAULT 0;
DECLARE sum_cursor CURSOR FOR SELECT id FROM range(5);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;
OPEN sum_cursor;
REPEAT
FETCH sum_cursor INTO x;
IF NOT done THEN
SET total = total + x;
END IF;
UNTIL done END REPEAT;
CLOSE sum_cursor;
VALUES (total);
END;
10
-- Fetch into a struct variable
> BEGIN
DECLARE result STRUCT<id: INT, name: STRING>;
DECLARE struct_cursor CURSOR FOR
SELECT id, 'name_' || id FROM range(3);
OPEN struct_cursor;
FETCH struct_cursor INTO result;
VALUES (result.id, result.name);
CLOSE struct_cursor;
END;
0|name_0
-- Using NEXT FROM (optional syntax)
> BEGIN
DECLARE x INT;
DECLARE cursor1 CURSOR FOR SELECT id FROM range(3);
OPEN cursor1;
FETCH NEXT FROM cursor1 INTO x;
VALUES (x);
CLOSE cursor1;
END;
0