Compartilhar via


Instrução OPEN

Aplica-se a:check marked yes Databricks Runtime 18.1 e superior

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

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

Essa instrução só pode ser usada em uma instrução composta.

Observação

Ao abrir o cursor, erros semânticos, como TABLE_OR_VIEW_NOT_FOUND ou COLUMN_NOT_FOUND_IN_TABLE , serão gerados se presentes. Abrir o cursor também inicia a execução da consulta, o que pode gerar erros de runtime, como DIVIDE_BY_ZERO dependendo de quanto 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 um rótulo de instrução composta para fazer referência a um cursor 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âmetro na consulta de cursor.

Anotações

Correspondências de comportamento de associação de parâmetro EXECUTE IMMEDIATE:

Se a consulta do cursor gerar um erro durante a execução (consulte condições de erro), o cursor permanecerá em um estado fechado. Abrir um cursor que não está no escopo gera CURSOR_NOT_FOUND. Abrir um cursor que já está aberto gera 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