Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőre vonatkozik: yes Databricks Runtime 18.1 vagy újabb ![]()
Beolvassa a következő sort egy nyitott kurzorból változókba.
Az FETCH utasítás egyszerre egy sort kér le a kurzor eredményhalmazából, és oszlopértékeket rendel a megadott változókhoz. Ha nincs több sor, a CURSOR_NO_MORE_ROWS feltétel (SQLSTATE '02000') létrejön.
Ez az utasítás csak összetett utasításban használható.
Megjegyzés:
Az FETCHoszlopértékek változókhoz való hozzárendelésekor az öntési hibák (például DATATYPE_MISMATCH) is felmerülhetnek. Futásidejű hibák, például DIVIDE_BY_ZERO is előfordulhatnak, és az SQL-feldolgozás orientáltsága miatt a lekérendő sortól függetlenek lehetnek.
Szemantika
FETCH [ [ NEXT ] FROM ] cursor_name INTO variable_name [, ...]
Paraméterek
-
Egy megnyitott kurzor neve. A kurzor opcionálisan minősíthető összetett utasítás címkével (pl.
outer_label.my_cursor). NEXT FROMVálasztható kulcsszavak.
NEXTésFROMszintaktikus cukor, és nem befolyásolja a viselkedést. Csak a továbbítási beolvasás támogatott.-
Oszlopértékek fogadásához használt helyi vagy munkamenet-változó. A változók számának egy kivétellel meg kell egyeznie a kurzor eredményhalmazában lévő oszlopok számával; ellenkező esetben ASSIGNMENT_ARITY_MISMATCH :
- Ha pontosan egy változó van megadva, és egy
STRUCTtípus, és a kurzor több oszlopot ad vissza, az oszlopértékek pozíció szerint vannak hozzárendelve a szerkezet mezőihez.
Az oszlopadattípusoknak kompatibilisnek kell lenniük a célváltozókkal (vagy strukturálási mezőkkel) az adattár-hozzárendelési szabályok szerint.
- Ha pontosan egy változó van megadva, és egy
Jegyzetek
Ha nincs több sor, FETCH a CURSOR_NO_MORE_ROWS feltételt (SQLSTATE) emeli '02000'ki. Ez egy befejezési feltétel, nem kivétel: nem megszakítja a végrehajtást. Egy NOT FOUND vagy CURSOR_NO_MORE_ROWS több kezelő feldolgozhatja; NOT FOUND minden SQLSTATE-feltételt '02xxx' elkap.
A nem megnyitott kurzorról való beolvasás CURSOR_NOT_OPEN. A típuskompatibilitás az áruház-hozzárendelési szabályokat követi: az inkompatibilis típusok DATATYPE_MISMATCH hibát okoznak; implicit öntötteket alkalmazunk, ha lehetséges.
A változók lehetnek az összetett utasításban deklarált helyi változók, vagy a munkamenet szintjén létrehozott DECLARE VARIABLE munkamenet-változók.
Examples
-- 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