Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:
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
-
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.
- constant_expr: Uma expressão constante (literal ou variável) para se ligar a um marcador de parâmetro. A expressão deve ser castável para o tipo esperado pela consulta.
-
COMO param_name: Opcional. Para marcadores de parâmetros nomeados (
:param_name), isto especifica qual parâmetro atribuir. Se não for especificado para marcadores de parâmetros não nomeados (?), os parâmetros são limitados pela posição.
Observações
O comportamento de ligação de parâmetros corresponde EXECUTE IMMEDIATE:
- Todos os marcadores de parâmetros na consulta devem ser limitados.
- Para marcadores de parâmetros nomeados (
:name), aAS param_namecláusula especifica a ligação. - Para marcadores de parâmetros não nomeados (
?), as expressões são limitadas na ordem especificada.
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