Aracılığıyla paylaş


FETCH deyimi

Şunun için geçerlidir:evet olarak işaretlendi Databricks Runtime 18.1 ve üzerini denetleyin

Açık bir imleçten sonraki satırı değişkenlere getirir.

deyimi, FETCH imlecin sonuç kümesinden bir kerede bir satır alır ve belirtilen değişkenlere sütun değerleri atar. Başka satır yoksa , CURSOR_NO_MORE_ROWS koşulu oluşturulur (SQLSTATE '02000').

Bu deyim yalnızca bileşik deyimi içinde kullanılabilir.

Uyarı

için FETCH, değişkenlere sütun değerleri atanırken atama hataları (örneğin , DATATYPE_MISMATCH) oluşturulabilir. DIVIDE_BY_ZERO gibi çalışma zamanı hataları da oluşabilir ve SQL işlemenin ayar odaklı yapısı nedeniyle getirilmekte olan satırla ilgisiz olabilir.

Sözdizimi

FETCH [ [ NEXT ] FROM ] cursor_name INTO variable_name [, ...]

Parametreler

  • Cursor_name

    Açık bir imlecin adı. İmleç isteğe bağlı olarak bileşik deyim etiketiyle (örn. outer_label.my_cursor) nitelenebilir.

  • NEXT FROM

    İsteğe bağlı anahtar sözcükler. NEXT ve FROM söz dizimsel şekerdir ve davranışı etkilemez. Yalnızca ileriye getirme desteklenir.

  • variable_name

    Sütun değerlerini almak için yerel veya oturum değişkeni. Değişken sayısı, bir özel durum dışında imlecin sonuç kümesindeki sütun sayısıyla eşleşmelidir; aksi takdirde ASSIGNMENT_ARITY_MISMATCH oluşturulur:

    • Tam olarak bir değişken belirtilirse ve bir STRUCT türse ve imleç birden çok sütun döndürürse, sütun değerleri yapı alanlarına konuma göre atanır.

    Sütun veri türlerinin, depo atama kurallarına göre hedef değişkenlerle (veya yapı alanlarıyla) uyumlu olması gerekir.

Notes

Kullanılabilir satır kalmadığında, FETCHCURSOR_NO_MORE_ROWS koşulunu (SQLSTATE '02000') yükseltir. Bu bir tamamlama koşuludur, özel durum değildir: yürütmeyi durdurmaz. Bir NOT FOUND veya CURSOR_NO_MORE_ROWS işleyici bunu işleyebilir; NOT FOUND tüm SQLSTATE '02xxx' koşullarını yakalar.

Açık olmayan bir imleçten getirildiğinde CURSOR_NOT_OPEN yükseltilir. Tür uyumluluğu, depolama atama kurallarına uyar: uyumsuz türler DATATYPE_MISMATCH hatası verir; Mümkün olduğunda örtük atamalar uygulanır.

Değişkenler , bileşik deyimde bildirilen yerel değişkenler veya oturum düzeyinde ile DECLARE VARIABLE oluşturulan oturum değişkenleri olabilir.

Örnekler

-- 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