FETCH

Nombre

FETCH  --  Selecciona filas usando un cursor

Synopsis

FETCH [ selector ] [ count ] { IN | FROM } cursor
FETCH [ RELATIVE ] [ { [ # | ALL | NEXT | PRIOR ] } ] FROM ] cursor
  

Entradas

selector

selector define la dirección de FETCH. Puede ser una de las siguientes:

FORWARD

selecciona la(s) siguiente(s) filas. Es el valor por defecto si se omite selector.

BACKWARD

selecciona la(s) fila(s) anterior(es).

RELATIVE

Palabra sin significado (Noise word), para compatibilidad con SQL92.

count

count determina cuántas filas hay que seleccionar. Puede ser uno de los siguientes:

#

Un entero con signo que especifica cuántas filas hay que seleccionar. Dese cuenta de que un entero negativo es equivalente a cambiar el sentido de FORWARD y BACKWARD.

ALL

Devuelve todas las filas restantes.

NEXT

Equivalente a especificar un "count" de 1.

PRIOR

Equivalente a especificar un "count" de -1.

cursor

El nombre de un cursor abierto.

Salidas

FETCH retorna el resultado de la consulta definida por el cursor especificado. Si la consulta falla serán mostrados los siguientes mensajes:

NOTICE: PerformPortalFetch: portal "cursor" not found

Si el cursor no está previamente declarado. El cursor debe ser declarado dentro de un bloque de operación (transaction block).

NOTICE: FETCH/ABSOLUTE not supported, using RELATIVE

Postgres no soporta el posicionamiento absoluto de los cursores.

ERROR: FETCH/RELATIVE at current position is not supported

SQL92 permite devolver de forma repetida el cursor en su "posición actual" usando la sintaxis

FETCH RELATIVE 0 FROM cursor
	

Postgres actualmente no soporta este concepto, de hecho, el valor cero está reservado para indicar que todas las filas deben ser devueltas y es equivalente a especificar la palabra clave ALL. Si se ha usado la palabra clave RELATIVE, Postgres asume que el usuario desea un comportamiento como en SQL92 y devuelve este mensaje de error.

Description

FETCH permite a un usuario devolver filas usando un cursor. El número de filas devueltas está especificado mediante #. Si el número de filas restantes en el cursor es menor a than #, sólo serán seleccionadas las disponibles. Sustituyendo la palabra clave ALL en lugar de un número provocará que sean devueltas todas las filas restantes en el cursor. Las instancias pueden ser seleccionadas en ambas direcciones hacia adelante y hacia atrás (FORWARD y BACKWARD). La dirección por defecto es FORWARD.

Sugerencia: Se permite especificar números negativos en el contador. Un número negativo es equivalente a modificar el sentido de las palabras clave FORWARD y BACKWARD. Por ejemplo, FORWARD -1 es igual aBACKWARD 1.

Notas

Dese cuenta de que las palabras clave FORWARD y BACKWARD son extensiones Postgres. La sintaxis SQL92 también es soportada, especificada en la segunda forma del comando. Véanse más abajo detalles y temas de compatibilidad.

Una vez todas las filas se han seleccionado, todos los demás accesos de fetch no devuelven filas.

Postgres no soporta la característica de actualizar los datos en un cursor, ya que volver a mapear las actualizaciones del cursor en las tablas base no es posible por regla general, como sucede también en las actualizaciones de las vistas (VIEW). Por consiguiente, los usuarios deben explicitar comandos UPDATE para sustituir los datos.

Los cursores sólo sólo se deberían usar dentro de transacciones, ya que los datos que almacenan abarcan múltiples consultas de usuario.

Usar MOVE para modificar la posición del cursor. DECLARE definirá un cursor. Refiérase a BEGIN, COMMIT, y a ROLLBACK para mayor información acerca de las transacciones.

Uso

Los siguientes ejemplos recorren una tabla unsando un cursor. The following examples traverses a table using a cursor.

   --montar y usar un cursor:
   --
   BEGIN WORK;
     DECLARE liahona CURSOR
        FOR SELECT * FROM films;

   --seleccionar las primeras cinco filas en el cursor liahona:
   --
     FETCH FORWARD 5 IN liahona;

         code |title                  |did| date_prod|kind      |len
     -----+-----------------------+---+----------+----------+------
     BL101|The Third Man          |101|1949-12-23|Drama     | 01:44
     BL102|The African Queen      |101|1951-08-11|Romantic  | 01:43
     JL201|Une Femme est une Femme|102|1961-03-12|Romantic  | 01:25
     P_301|Vertigo                |103|1958-11-14|Action    | 02:08
     P_302|Becket                 |103|1964-02-03|Drama     | 02:28
    

   --Seleccionar la fila anterior:
   --
     FETCH BACKWARD 1 IN liahona;

         code |title                  |did| date_prod|kind      |len
     -----+-----------------------+---+----------+----------+------
     P_301|Vertigo                |103|1958-11-14|Action    | 02:08
    

   -- cerrar el cursor y commit work:
   --
     CLOSE liahona;
   COMMIT WORK;
   

Compatibilidad

SQL92

Nota: El uso no embebido de los cursores es una extensión Postgres. La sintaxis y el uso de los cursores está siendo comparada en contraposición a la forma embebida de los cursores definida en SQL92.

SQL92 permite el posicionamiento absoluto del cursor para FETCH y también la localización de los resultados en variables explícitas.

FETCH ABSOLUTE #
    FROM cursor
    INTO :variable [, ...]
    

ABSOLUTE

El cursor debe ser posicionado al número de fila absoluto especificado. Todos los números de filas en Postgres son números relativos, por lo tanto no se soporta esta característica.

:variable

Variable(s) objetivo del host.