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.