DECLARE

Nombre

DECLARE  --  Define un cursor para acceso a una tabla

Synopsis

 DECLARE cursorname [ BINARY ] [ INSENSITIVE ] [ SCROLL
] CURSOR FOR query [ FOR { READ
ONLY | UPDATE [ OF column [, ...]
] ] 

Inputs

cursorname

El nombre del cursor a ser usado en subsecuentes operaciones FETCH..

BINARY

Provoca que el cursor traiga datos en formato binario en vez de formato texto.

INSENSITIVE

SQL92 palabra clave indicando que los datos recuperados del cursor no deben ser afectados por actualizaciones desde otros procesos o cursores. Ya que la operación de los cursores ocurre dentro de las transacciones, en Postgres este siempre es el caso. Esta palabra clave no tiene efecto.

SCROLL

SQL92 palabra clave indicando que los datos deben ser recuperados en múltiples filas por cada operación FETCH. Ya que esto es siempre permitido por Postgres esta palabra clave no tiene efecto.

query

Una consulta SQL la cual proveera las filas a ser governadas por el cursor. Referirse al comando SELECT para mayor información acerca de los argumentos válidos.

READ ONLY

SQL92 palabra clave indicando que el cursor sera usado en modo solo lectura. Ya que este es el único modo de acceso de cursor disponible en Postgres esta palabra clave no tiene efecto.

UPDATE

SQL92 palabra clave indicando que el cursor sera usado para actualizar tablas. Ya que la actualización de cursores no esta actualmente soportada en Postgres esta palabra clave provoca un mensaje de error informativo.

column

Columna(s) a ser actualizadas. Ya que la actualización de cursores no esta actualmente soportada en Postgres la clausula UPDATE provoca un mensaje de error informativo.

Outputs

SELECT

El mensaje devuelto si el SELECT es ejecutado exitosamente.

NOTICE BlankPortalAssignName: portal"cursorname" already exists

Este error ocurre si cursorname ya esta declarado.

ERROR: Named portals may only be used in begin/endtransaction blocks

Este error ocurre si el cursor no esta declarado dentro de un transaction block.

Description

DECLARE permite a un usuario crear cursores, los cuales pueden ser usados para recuperar un pequeno número de filas a la vez provenientes de una consulta mas extensa. Los cursores pueden devolver datos ya sea en formato de texto o en foemato binario FETCH.

Los cursores comunes retornan datos en formato texto, ya sea ASCII u otro esquema de codificacion dependiendo en como el Postgres backend fue creado. Ya que los datos estan guardados nativamente en formato binario, el sistema debe hacer una conversión para producir formato texto. Ademas, los formatos de texto son a menudo mayores en tamano que sus correspondientes en formato binario. Una vez que la información viene en formato texto, la aplicación cliente podria necesitar convertirlos a un formato binario para manipularlos. los cursores BINARY devuelven los datos en una representación binaria nativa.

Como ejemplo, si una consulta devuelve un valor de uno desde una columna integer, usted obtendria un string de '1' con un cursor default mientras que con un cursor binario usted obtendria un valor 4-byte igual a un control-A ('^A').

Los cursores BINARY deben ser usados cuidadosamente. Aplicaciones de usuario tales como psql no son conscientes de los cursores binarios y esperan que los datos vengan en formato texto.

La representación de los string es neutral respecto a la arquitectura, mientra que la representación binaria puede diferir entre diferentes arquitecturas de máquinas y Postgres no resuelve el ordenamiento de bytes o las cuestines de representacion para los cursores binarios. Por consiguiente, si su máquina cliente y su máquina servidor usa diferentes representaciones (e.g. "big-endian" contra "little-endian"), probablemente usted no deseara sus datos devueltos en formato binario. Sin embargo, los cursores binarios pueden ser un poco más eficientes ya que hay menos overhead debido a la conversión en la transferencias de datos del servidor al cliente.

Sugerencia

Si usted pretende mostrar los datos en ASCII, recuperarlos en ASCII le ahorraran un poco de esfuerzo del lado cliente.

Notes

Los cursores solo estan disponibles en las transacciones. Usar para BEGIN, COMMIT y ROLLBACK para definir un transaction block.

En SQL92 los cursores estan disponibles solo en aplicaciones SQL (ESQL) embebidas. EL Postgres backend no implementa un comando explicito OPEN cursor ; un cursor se considera abierto cuando este es declarado. Sin embargo, ecpg, el preprosesador embebido de SQL para Postgres, soporta la convención de cursores SQL92 , incluyendo aquellos que involucran los comandos DECLARE y OPEN.

Uso

Para declarar un cursor:

 DECLARE liahona CURSOR FOR SELECT * FROMfilms; 

Compatibilidad

SQL92

SQL92 permite cursores solo en SQL embebido y en modulos. Postgres permite cursores para ser usados en forma interactiva. SQL92 permite cursores embebidos o modulares para actualizar información de la base de datos. Todos los cursores Postgres son de solo lectura. La palabra clave BINARY es una extensión de Postgres.