Sdílet prostřednictvím


Příkaz OPEN

Platí pro:check označený ano Databricks Runtime 18.1 a novější

Otevře kurzor a spustí jeho dotaz a umístí ho před první řádek.

Příkaz OPEN spustí dotaz definovaný v DECLARE CURSOR deklaraci, vyváže všechny značky parametrů, pokud je zadán. Po otevření lze kurzor použít FETCH k načtení řádků.

Tento příkaz lze použít pouze ve složeném příkazu .

Poznámka:

Při otevření kurzoru jsou v případě přítomnosti vyvolány sémantické chyby, jako jsou TABLE_OR_VIEW_NOT_FOUND nebo COLUMN_NOT_FOUND_IN_TABLE . Otevření kurzoru také spustí spuštění dotazu, což může vyvolat chyby za běhu, například DIVIDE_BY_ZERO v závislosti na tom, kolik dotazu se spustí.

Syntaxe

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

Parametry

  • cursor_name

    Název deklarovaného kurzoru. Kurzor může být volitelně kvalifikovaný pomocí popisku složeného příkazu, který odkazuje na kurzor z vnějšího oboru (např outer_label.my_cursor. ).

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

    Volitelná klauzule pro vazbu hodnot se značkami parametrů v dotazu kurzoru.

Poznámky

Chování EXECUTE IMMEDIATEvazby parametru odpovídá:

Pokud dotaz kurzoru při provádění vyvolá chybu (viz Chybové podmínky), kurzor zůstane v zavřeném stavu. Otevření kurzoru, který není v oboru, vyvolává CURSOR_NOT_FOUND. Otevření kurzoru, který je již otevřen , vyvolá CURSOR_ALREADY_OPEN.

Příklady

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