Aracılığıyla paylaş


OPEN deyimi

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

İmleci açar ve sorgusunu ilk satırdan önce konumlandırarak yürütür.

deyimi OPEN bildirimde DECLARE CURSOR tanımlanan sorguyu yürütür ve belirtildiyse parametre işaretçilerini bağlar. Açıldıktan sonra, satırları almak için imleç ile FETCH birlikte kullanılabilir.

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

Uyarı

İmleci açarken, varsa TABLE_OR_VIEW_NOT_FOUND veya COLUMN_NOT_FOUND_IN_TABLE gibi anlamsal hatalar ortaya çıkar. İmleci açmak sorgunun yürütülmesini de başlatır ve bu da sorgunun ne kadarının yürütülmesine bağlı olarak DIVIDE_BY_ZERO gibi çalışma zamanı hatalarına neden olabilir.

Sözdizimi

OPEN cursor_name [ USING { constant_expr [ AS param_name ] } [, ...] ]

Parametreler

  • Cursor_name

    Bildirilen imlecin adı. İmleç, isteğe bağlı olarak dış kapsamdan bir imlece başvurmak için bileşik deyim etiketiyle nitelenebilir (örn. outer_label.my_cursor).

  • USING { constant_expr [ AS param_name ] } [, ...]

    İmleç sorgusundaki parametre işaretçilerine değerleri bağlamak için isteğe bağlı yan tümcesi.

Notes

Parametre bağlama davranışı ile eşleşir EXECUTE IMMEDIATE:

İmlecin sorgusu yürütme sırasında bir hata oluşturursa (bkz . Hata koşulları), imleç kapalı durumda kalır. Kapsamda olmayan bir imlecin açılması CURSOR_NOT_FOUND oluşturur. Zaten açık olan bir imlecin açılması CURSOR_ALREADY_OPEN yükseltir.

Örnekler

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