Compartir a través de


Instrucción OPEN

Se aplica a:check marcado yes Databricks Runtime 18.1 y versiones posteriores

Abre un cursor y ejecuta su consulta y la coloca delante de la primera fila.

La OPEN instrucción ejecuta la consulta definida en la DECLARE CURSOR declaración, enlazando los marcadores de parámetro si se especifican. Una vez abierto, el cursor se puede usar con FETCH para recuperar filas.

Esta instrucción solo se puede usar dentro de una instrucción compuesta.

Nota:

Al abrir el cursor, se generan errores semánticos como TABLE_OR_VIEW_NOT_FOUND o COLUMN_NOT_FOUND_IN_TABLE si están presentes. Al abrir el cursor también se inicia la ejecución de la consulta, que puede generar errores en tiempo de ejecución, como DIVIDE_BY_ZERO en función de la cantidad de ejecución de la consulta.

Sintaxis

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

Parámetros

  • cursor_name

    Nombre de un cursor declarado. El cursor se puede calificar opcionalmente con una etiqueta de instrucción compuesta para hacer referencia a un cursor desde un ámbito externo (por ejemplo, outer_label.my_cursor).

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

    Cláusula opcional para enlazar valores a marcadores de parámetros en la consulta de cursor.

Notas

El comportamiento del enlace de parámetros coincide con EXECUTE IMMEDIATE:

Si la consulta del cursor genera un error durante la ejecución (vea Condiciones de error), el cursor permanece en un estado cerrado. Al abrir un cursor que no está en el ámbito, se genera CURSOR_NOT_FOUND. Abrir un cursor que ya está abierto genera CURSOR_ALREADY_OPEN.

Examples

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