Partilhar via


Declaração ABERTA

Aplica-se a:sim Databricks Runtime 18.1 e superiores

Abre um cursor e executa a consulta, posicionando-a antes da primeira linha.

A OPEN instrução executa a consulta definida na DECLARE CURSOR declaração, ligando quaisquer marcadores de parâmetro se especificados. Uma vez aberto, o cursor pode ser usado para FETCH recuperar linhas.

Esta declaração só pode ser usada dentro de uma declaração composta .

Observação

Ao abrir o cursor, erros semânticos como TABLE_OR_VIEW_NOT_FOUND ou COLUMN_NOT_FOUND_IN_TABLE são apresentados, se existirem. Abrir o cursor também inicia a execução da consulta, o que pode gerar erros em tempo de execução, como DIVIDE_BY_ZERO dependendo da quantidade da consulta executada.

Sintaxe

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

Parâmetros

  • cursor_name

    O nome de um cursor declarado. O cursor pode ser opcionalmente qualificado com uma etiqueta de instrução composta para referenciar um cursor a partir de um escopo externo (por exemplo, outer_label.my_cursor).

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

    Cláusula opcional para associar valores a marcadores de parâmetros na consulta do cursor.

Observações

O comportamento de ligação de parâmetros corresponde EXECUTE IMMEDIATE:

Se a consulta do cursor gerar um erro durante a execução (ver Condições de erro), o cursor permanece em estado fechado. Abrir um cursor que não está dentro do âmbito aumenta CURSOR_NOT_FOUND. Abrir um cursor que já está aberto levanta CURSOR_ALREADY_OPEN.

Exemplos

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