DECLARE

Name

DECLARE  --  définit un curseur

Synopsis

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

Entrées

cursorname

Le nom du curseur à utiliser dans les opérations FETCH subséquentes.

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 ou 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 à tout moment 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 accès curseur seul 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 mises à jour curseur ne sont pas supportés par Postgres ce mot-clé provoque un message d'erreur informel.

column

Colonnes a mettre à jour. Depuis que les mises à jour curseur 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: Closing pre-existing portal "cursorname"

Message apparaissant si le même nom de curseur a déja été déclaré dans le bloc de transaction en cours. La définition précédente est écartée.

ERROR: DECLARE CURSOR may only be used in begin/end transaction blocks

Message 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 en utilisant FETCH.

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.

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 à (^A).

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. PostgreSQL ne résout pas l'ordre des des octets ou la représentation des sorties pour les curseurs binaires. 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. Cependant, les curseurs binaires peuvent être un peu efficaces car il y a moins de conversion à faire en transfert entre le serveur et le client.

Tip

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. Utilisez BEGIN, COMMIT et ROLLBACK pour définir un bloc de transaction.

en SQL92 les curseurs sont seulement disponibles dans les applications SQL (ESQL) embarquées. Le serveur PostgreSQL n'implémente pas d'instruction OPEN cursor explicite; un curseur est considéré ouvert lorsqu'il est déclaré. Cependant, ecpg, le préprocesseur SQL embarqué de PostgreSQL, supporte les conventions de curseur SQL92 incluant celles qui comprennent les instructions DECLARE et OPEN.

Utilisation

Pour cé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 seule. Le mot-clé BINARY est une extension Postgres.