Megosztás a következőn keresztül:


FETCH utasítás

A következőre vonatkozik: yes Databricks Runtime 18.1 vagy újabb jelöléssel

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

  • cursor_name

    Egy megnyitott kurzor neve. A kurzor opcionálisan minősíthető összetett utasítás címkével (pl. outer_label.my_cursor).

  • NEXT FROM

    Választható kulcsszavak. NEXT és FROM szintaktikus cukor, és nem befolyásolja a viselkedést. Csak a továbbítási beolvasás támogatott.

  • variable_name

    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 STRUCT tí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.

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