FETCH

Nome

FETCH -- retorna linhas de uma consulta usando um cursor

Sinopse

FETCH [ direção { FROM | IN } ] nome_do_cursor

onde direção
pode ser omitida ou pode ser um entre:

    NEXT
    PRIOR
    FIRST
    LAST
    ABSOLUTE contador
    RELATIVE contador
    contador
    ALL
    FORWARD
    FORWARD contador
    FORWARD ALL
    BACKWARD
    BACKWARD contador
    BACKWARD ALL

Descrição

O comando FETCH retorna linhas utilizando um cursor previamente criado. [1] [2] [3]

O cursor possui uma posição associada, que é utilizada pelo comando FETCH. A posição do cursor pode ser: antes da primeira linha, em uma determinada linha, ou após a última linha do resultado da consulta. Ao ser criado, o cursor fica posicionado antes da primeira linha. Após retornar algumas linhas, o cursor fica posicionado na linha retornada mais recentemente. Se o comando FETCH ultrapassar o final das linhas disponíveis, então o cursor ficará posicionado após a última linha, ou antes da primeira linha se estiver retornando linhas para trás. Os comandos FETCH ALL e FETCH BACKWARD ALL sempre deixam o cursor posicionado após a última linha ou antes da primeira linha, respectivamente.

As formas NEXT, PRIOR, FIRST, LAST, ABSOLUTE e RELATIVE retornam uma única linha após mover o cursor de forma apropriada. Se a linha não existir, será retornado um resultado vazio, e o cursor será deixado posicionado antes da primeira linha ou após a última linha, conforme for apropriado.

As formas que utilizam FORWARD e BACKWARD retornam o número indicado de linhas movendo o cursor para frente ou para trás, deixando o cursor posicionado na última linha retornada; ou após/antes de todas as linhas se o contador exceder o número de linhas disponíveis.

RELATIVE 0, FORWARD 0 e BACKWARD 0 requerem que seja retornada a linha corrente sem mover o cursor, ou seja, retorna novamente a linha retornada mais recentemente. Sempre é bem-sucedido, a menos que o cursor esteja posicionado antes da primeira linha ou após a última linha; nestes casos, não é retornada nenhuma linha.

Parâmetros

direção

Define a direção e o número de linhas a serem retornadas. Pode ser um entre os seguintes:

NEXT

Retorna a próxima linha. Este é o padrão quando a direção é omitida.

PRIOR

Retorna a linha anterior.

FIRST

Retorna a primeira linha da consulta (o mesmo que ABSOLUTE 1).

LAST

Retorna a última linha da consulta (o mesmo que ABSOLUTE -1).

ABSOLUTE contador

Retorna a contador-ésima linha da consulta, ou a abs(contador)-ésima linha a partir do fim se o contador for negativo. Posiciona antes da primeira linha ou após a última linha se o contador estiver fora do intervalo; em particular, ABSOLUTE 0 posiciona antes da primeira linha.

RELATIVE contador

Retorna a contador-ésima linha à frente, ou a abs(contador)-ésima linha atrás se o contador for negativo. RELATIVE 0 retorna novamente a linha corrente, se houver.

contador

Retorna as próximas contador linhas (o mesmo que FORWARD contador).

ALL

Retorna todas as linhas restantes (o mesmo que FORWARD ALL).

FORWARD

Retorna a próxima linha (o mesmo que NEXT).

FORWARD contador

Retorna as próximas contador linhas. FORWARD 0 retorna novamente a linha corrente.

FORWARD ALL

Retorna todas as linhas restantes.

BACKWARD

Retorna a linha anterior (o mesmo que PRIOR)..

BACKWARD contador

Retorna as contador linhas anteriores (varrendo para trás). BACKWARD 0 retorna novamente a linha corrente.

BACKWARD ALL

Retorna todas as linhas anteriores (varrendo para trás).

contador

O contador é uma constante inteira, possivelmente com sinal, que determina a posição ou o número de linhas a serem retornadas. Para os casos FORWARD e BACKWARD, especificar um contador negativo é equivalente a mudar o sentido de FORWARD e BACKWARD.

nome_do_cursor

O nome de um cursor aberto.

Saídas

Ao término bem-sucedido, o comando FETCH retorna uma linha de fim de comando na forma

FETCH contador

O contador é o número de linhas trazidas (possivelmente zero). Deve ser observado que no psql a linha de fim de comando não é exibida, uma vez que o psql mostra as linhas retornadas em seu lugar.

Observações

O cursor deve ser declarado com a opção SCROLL se houver intenção de utilizar qualquer variante do comando FETCH que não seja FETCH NEXT ou FETCH FORWARD com um contador positivo. Para consultas simples o PostgreSQL permite retornar linhas rolando para trás a partir de cursores não declarados com a opção SCROLL, mas é melhor não confiar neste comportamento. Se o cursor for declarado com a opção NO SCROLL, então não será permitido retornar linhas rolando para trás.

Retornar linhas com a opção ABSOLUTE não é nem um pouco mais rápido que navegar para a linha desejada usando um movimento relativo: a implementação subjacente necessita de qualquer maneira percorrer todas as linhas intermediárias. Retorno de linha absoluta negativa é pior ainda: a consulta precisa ser lida até o fim para encontrar a última linha, e depois percorrida para trás a partir deste ponto. Entretanto, voltar para o início da consulta (como com FETCH ABSOLUTE 0) é rápido.

Atualmente o PostgreSQL não permite a atualização dos dados através de cursores.

Para definir o cursor é utilizado o comando DECLARE. Para mudar a posição do cursor sem trazer dados é utilizado o comando MOVE.

Exemplos

O exemplo a seguir percorre uma tabela usando um cursor.

BEGIN WORK;

-- Definir o cursor:
DECLARE liahona SCROLL CURSOR FOR SELECT * FROM filmes;

-- Retornar as 5 primeiras linhas do cursor liahona:
FETCH FORWARD 5 FROM liahona;

 cod   |          titulo         | did | data_prod  |   tipo   | duracao
-------+-------------------------+-----+------------+----------+---------
 BL101 | The Third Man           | 101 | 1949-12-23 | Drama    | 01:44
 BL102 | The African Queen       | 101 | 1951-08-11 | Romance  | 01:43
 JL201 | Une Femme est une Femme | 102 | 1961-03-12 | Romance  | 01:25
 P_301 | Vertigo                 | 103 | 1958-11-14 | Ação     | 02:08
 P_302 | Becket                  | 103 | 1964-02-03 | Drama    | 02:28

-- Retornar a linha anterior:
FETCH PRIOR FROM liahona;

 cod   |  titulo | did | data_prod  |  tipo  | duracao
-------+---------+-----+------------+--------+---------
 P_301 | Vertigo | 103 | 1958-11-14 |  Ação  | 02:08

-- Fechar o cursor e terminar a transação:
CLOSE liahona;
COMMIT WORK;

Compatibilidade

O padrão SQL define o comando FETCH apenas para uso na linguagem SQL incorporada (embedded). Esta variante do FETCH descrita aqui retorna os dados como se fossem o resultado de um comando SELECT, em vez de colocar nas variáveis hospedeiras. Fora este ponto, o comando FETCH possui total compatibilidade ascendente [4] com o padrão SQL.

As formas do comando FETCH envolvendo FORWARD e BACKWARD, assim como as formas FETCH contador e FETCH ALL, nas quais FORWARD está implícito, são extensões do PostgreSQL.

O padrão SQL permite apenas o FROM precedendo o nome do cursor; a opção para utilizar IN é uma extensão.

Consulte também

CLOSE, DECLARE, MOVE

Notas

[1]

SQL Server — O comando FETCH retorna uma linha específica de um cursor de servidor Transact-SQL. Se não for especificada a opção SCROLL em um comando DECLARE CURSOR no estilo SQL-92, a única opção suportada para o comando FETCH será NEXT. Se for especificada a opção SCROLL em um comando DECLARE CURSOR no estilo SQL-92, todas as opções do comando FETCH serão suportadas. SQL Server 2005 Books Online — FETCH (Transact-SQL) (N. do T.)

[2]

SQL Server 2000 — O comando FETCH retorna uma linha específica de um cursor. Se não for especificada a opção NEXT, PRIOR, FIRST nem LAST, o comando FETCH irá retornar as próximas n linhas do conjunto de resultados produzido pelo comando OPEN para este cursor, e escrever os valores das colunas destas linhas nas variáveis hospedeiras correspondentes ou nos endereços especificados pela estrutura de dados SQLDA. Um comando OPEN nome_do_cursor deve preceder o comando FETCH, e o cursor deverá estar aberto enquanto o comando FETCH estiver executando. Além disso, os tipos de dado das variáveis hospedeiras precisam ser compatíveis com os tipos de dado das colunas do banco de dados correspondentes. Embedded SQL for C and SQL Server — FETCH (N. do T.)

[3]

DB2 — O comando FETCH posiciona o cursor na próxima linha de sua tabela de resultado e atribui os valores desta linha às variáveis hospedeiras. Embora um recurso interativo possa fornecer uma interface que dê a aparência de uma execução interativa, este comando somente pode ser incorporado a um programa aplicativo. É um comando executável que não pode ser preparado dinamicamente. DB2 Version 9 for Linux, UNIX, and Windows (N. do T.)

[4]

compatibilidade ascendente (upward compatibility) — característica de um software que funciona sem modificações em versões mais recentes ou mais avançadas de determinado sistema de computador. Webster's New World Dicionário de Informática, Bryan Pfaffenberger, Editora Campus, 1999, pág. 200. (N. do T.)

SourceForge.net Logo CSS válido!