Ouvrir un curseur précédemment déclaré afin d'accéder aux informations de la base de données.
OPEN nom_curseur
[ USING [ DESCRIPTOR nom_sqlda | var_hôte, ...] ]
[ WITH HOLD ]
[ ISOLATION LEVEL n ]
[ BLOCK n ]
nom_curseur : identificateur ou var_hôte
nom_sqlda : identificateur
Utilisation d'Embedded SQL Une fois l'instruction OPEN correctement exécutée, le champ sqlerrd[3] de la zone SQLCA (SQLIOESTIMATE) est renseigné avec une estimation du nombre d'entrées/sorties requises pour extraire toutes les lignes de la requête. De même, le champ sqlerrd[2] de la SQLCA (SQLCOUNT) est renseigné soit avec le nombre réel de lignes dans le curseur (une valeur supérieure ou égale à 0), soit avec l'estimation correspondante (un nombre négatif dont la valeur absolue représente l'estimation). C'est le nombre de lignes réel qui est pris en compte si le serveur de base de données peut le calculer sans compter les lignes. Vous pouvez également configurer la base de données de manière qu'elle renvoie toujours le nombre de lignes réel (voir Option ROW_COUNTS [base de données]), ce qui peut se révéler lourd à gérer.
Si vous spécifiez le nom du curseur (nom_curseur) sous la forme d'un identificateur ou d'une chaîne, l'instruction DECLARE CURSOR correspondante doit apparaître avant l'instruction OPEN dans le programme en langage C. En revanche, si vous spécifiez le nom du curseur sous la forme d'une variable hôte, l'instruction DECLARE CURSOR doit être exécutée avant l'instruction OPEN.
Clause USING DESCRIPTOR La clause USING DESCRIPTOR est réservée à Embedded SQL. Elle précise les variables hôtes à lier aux marques de réservation d'une instruction SELECT pour laquelle le curseur a été déclaré.
Clause WITH HOLD Par défaut, tous les curseurs sont automatiquement fermés à la fin de la transaction courante (COMMIT ou ROLLBACK). La clause facultative WITH HOLD permet de maintenir le curseur ouvert pour les transactions ultérieures. Il reste ouvert jusqu'à la fin de la connexion courante ou jusqu'à l'exécution d'une instruction CLOSE explicite. L'interruption d'une connexion entraîne automatiquement la fermeture des curseurs.
Clause ISOLATION LEVEL La clause ISOLATION LEVEL permet d'ouvrir le curseur désigné avec un niveau d'isolement différent de celui correspondant à la valeur courante de l'option ISOLATION_LEVEL. Toutes les opérations associées à ce curseur sont exécutées au niveau d'isolement spécifié, quelle que soit la valeur de l'option. Si vous omettez cette clause, le niveau d'isolement du curseur correspond alors, pour tout le temps où il reste ouvert, à la valeur de l'option ISOLATION_LEVEL à l'ouverture du curseur. Pour plus d'informations, reportez-vous à la section Fonctionnement du verrouillage.
Le curseur est positionné avant la première ligne (voir Utilisation de curseurs dans Embedded SQL ou Utilisation de curseurs dans les procédures et les triggers).
Clause BLOCK Cette clause est réservée à Embedded SQL. Les lignes sont extraites par l'application cliente sous forme de blocs (plusieurs lignes à la fois). Par défaut, le nombre de lignes par bloc est déterminé dynamiquement en fonction de la taille des lignes et du temps requis par le serveur de base de données pour extraire chaque ligne. L'application peut spécifier la clause BLOCK, qui permet de préciser le nombre maximal de lignes pouvant être contenues dans un bloc. Par exemple, spécifiez BLOCK 5 pour extraire et afficher 5 lignes à la fois. BLOCK 0 ne permet d'extraire qu'un seul enregistrement à la fois et génère un FETCH RELATIVE 0 (réextraction de la ligne).
Pour plus d'informations, reportez-vous à la section Instruction FETCH [ESQL] [SP].
L'instruction OPEN ouvre le curseur nommé. Le curseur doit avoir été préalablement déclaré.
Si le curseur est déclaré dans une instruction CALL, l'instruction OPEN déclenche l'exécution de la procédure jusqu'à ce que le premier jeu de résultats (instruction SELECT sans clause INTO) soit rencontré. Si la procédure se termine sans qu'aucun jeu de résultats n'ait été trouvé, l'avertissement SQLSTATE_PROCEDURE_COMPLETE est émis.
Vous devez détenir l'autorisation SELECT sur toutes les tables indiquées dans une instruction SELECT ou l'autorisation EXECUTE sur la procédure spécifiée dans une instruction CALL.
Aucun.
SQL/92 L'utilisation du langage Embedded SQL est une fonctionnalité d'entrée de gamme. L'utilisation des procédures est une fonctionnalité PSM (Persistent Stored Modules).
SQL/99 L'utilisation d'Embedded SQL est une fonction principale. L'utilisation des procédures est une fonctionnalité PSM (Persistent Stored Modules).
Sybase Adaptive Server Enterprise reconnaît la syntaxe simple OPEN nom_curseur. En revanche, les procédures stockées d'Adaptive Server Enterprise ne supportent aucune des autres clauses. Open Client/Open Server supporte la syntaxe du descripteur USING et des variables hôtes.
Voici des exemples d'utilisation de l'instruction OPEN en Embedded SQL :
EXEC SQL OPEN employee_cursor;
et
EXEC SQL PREPARE emp_stat FROM 'SELECT empnum, empname FROM employee WHERE name like ?'; EXEC SQL DECLARE employee_cursor CURSOR FOR emp_stat; EXEC SQL OPEN employee_cursor USING :pattern;
L'exemple ci-dessous est extrait d'une procédure ou d'un trigger :
BEGIN
DECLARE cur_employee CURSOR FOR
SELECT emp_lname
FROM employee;
DECLARE name CHAR(40);
OPEN cur_employee;
LOOP
FETCH NEXT cur_employee into name;
...
END LOOP
CLOSE cur_employee;
ENDSQL Anywhere Studio 9.0.1
Copyright © 1989–2004 Sybase, Inc. Copyright partiel © 2001–2004 iAnywhere Solutions, Inc. Tous droits réservés.