FETCH [ selector ] [ count ] { IN | FROM } cursor FETCH [ RELATIVE ] [ { [ # | ALL | NEXT | PRIOR ] } ] FROM ] cursor |
selector define la dirección de FETCH. Puede ser una de las siguientes:
selecciona la(s) siguiente(s) filas. Es el valor por defecto si se omite selector.
selecciona la(s) fila(s) anterior(es).
Palabra sin significado (Noise word), para compatibilidad con SQL92.
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.
Devuelve todas las filas restantes.
Equivalente a especificar un "count" de 1.
Equivalente a especificar un "count" de -1.
El nombre de un cursor abierto.
FETCH retorna el resultado de la consulta definida por el cursor especificado. Si la consulta falla serán mostrados los siguientes mensajes:
Si el cursor no está previamente declarado. El cursor debe ser declarado dentro de un bloque de operación (transaction block).
Postgres no soporta el posicionamiento absoluto de los cursores.
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.
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.
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. |
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.
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; |
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 [, ...] |
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(s) objetivo del host.