DECLARE

Nom

DECLARE — défini un curseur pour un accès à la table.
DECLARE cursor [ BINARY ] [ INSENSITIVE ] [ SCROLL ]
    CURSOR FOR query
    [ FOR { READ ONLY | UPDATE [ OF column [, ...] ] ]
  

Entrées

cursor

Le nom du curseur a utiliser dans les opérations FETCH ultérieures.

BINARY

Le curseur récupérera les données en binaire plus qu'en mode texte.

INSENSITIVE

SQL92 indiquant que les données retrouvées par le curseur ne seront pas affectées par les mises à jour depuis d'autres processus de curseurs. Depuis que les opérations de curseur ont lieu dans les transactions dans Postgres, ceci est toujours le cas. Ce mot-clé n'a pas d'effet.

SCROLL

Mot-clé SQL92 indiquant que les données peuvent être retrouvées dans de multiples lignes par l'opération FETCH. Depuis que c'est admis à tous les moments par Postgres, ce mot-clé n'a pas d'effet.

query

une requête SQL qui fournira les lignes régies par le curseur. Voir la commande SELECT pour plus d'information sur les arguments valides.

READ ONLY

Mot-clé SQL92 indiquant que le curseur sera utilisé en mode lecture seulement. Depuis qu'il y a le mode only cursor access disponible dans Postgres ce mot-clé n'a pas d'effet.

UPDATE

Mot-clé SQL92 indiquant que le curseur sera utilisé pour mettre à jour les tables. Depuis que les cursor updates ne sont pas supportés par Postgres ce mot-clé provoque un message d'erreur informel.

column

colonnes a mettre à jour. Depuis que les cursor updates ne sont pas supportés par Postgres ce mot-clé provoque un message d'erreur informel.

Sorties

SELECT

message retourné si le SELECT est lancé avec succés.

NOTICE BlankPortalAssignName: portal "cursor" already exists

erreur apparaissant si le cursor est déja déclaré.

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

erreur apparaissant si le curseur n'est pas déclaré dans un bloc de transaction.

Description

DECLARE permet à un utilisateur de créer des curseurs, qui peuvent être utilisés pour retrouver un petit nombre de lignes à un moment d'une grosse requête. Les curseurs peuvent retourner des données en format texte ou binaire. [1]

Les curseurs normaux retournent les données au format texte, un schéma ASCII ou autre schéma d'encodage dépendant de la construction du serveur Postgres. Depuis que les données sont stockées nativement en format binaire, le système doit faire une conversion pour produire du format texte. De plus, les formats texte sont souvent plus gros en taille que leur correspondant au format binaire. Une fois l'information retournée en format texte, l'application client peut avoir a la convertir en format binaire pour la manipuler.

Les curseurs BINARY retournent les données en représentation binaire native. Ainsi les curseurs binaires tendront a être un peu plus rapides car ils souffent moins de la conversion.

Par exemple, si une requête retourne une valeur de un depuis une colonne entier, vous obtiendrez une chaîne de '1' avec un curseur par défaut, tandis qu'avec un curseur binaire vous obtiendrez une valeur de 4-octets égale à control-A ('^A').

Attention

Les curseurs binaires seront utilisés avec prudence. Les applications utilisateur comme psql n'ont pas connaissance des curseurs binaires et attendent des données en format texte.

Cependant, la représentation de chaîne est neutre architecturalement, tandis que la représentation binaire peut différer entre différentes architectures machines. Donc, si votre machine cliente et votre machine serveur utilisent différentes représentation (ex. "big-endian" contre "little-endian"), vos données ne seront probablement pas retournées en binaire.

Tuyau

Si vous avez l'intention d'afficher vos données en ASCII, obtenir de l'ASCII en retour vous économisera des efforts côté client.

Notes

Les curseurs sont disponibles seulement dans les transactions.

Postgres n'a pas de clause explicite OPEN CURSOR; un curseur est considéré ouvert quand il est déclaré.

Note

en SQL92 les curseurs sont seulement disponibles dans les applications intégrées. ecpg, le préprocesseur SQL intégré de Postgres, supporte les conventions SQL92, incluant les commandes DECLARE et OPEN.

Utilisation

Pour déclarer un curseur :
DECLARE liahona CURSOR
    FOR SELECT * FROM films;
   

Compatibilité

SQL92

SQL92 admet les curseurs uniquement dans le SQL intégré et dans les modules. Postgres permet aux curseurs d'être utilisés interactivement. SQL92 admet les curseurs intégrés ou modulaires pour mettre à jour les informations de la base. Tous les curseurs Postgres sont en mode lecture seulement. Le mot-clé BINARY est une extension Postgres.

Notes

[1]

NdT. un curseur, est un pointeur contenant la clé base de données du dernier article manipulé d'une collection d'articles, et permettant au programme de se déplacer dans la base.