Interfaçage de programmation. c Olivier Caron



Documents pareils
Le langage SQL (première partie) c Olivier Caron

Introduction au langage C

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Programmation système I Les entrées/sorties

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Attaques applicatives

Les structures. Chapitre 3

PHP 4 PARTIE : BASE DE DONNEES

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Introduction à JDBC. Accès aux bases de données en Java

Le prototype de la fonction main()

Java et les bases de données

OpenPaaS Le réseau social d'entreprise

Mysql. Les requêtes préparées Prepared statements

Programmation système de commandes en C

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Configurer la supervision pour une base MS SQL Server Viadéis Services

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Notes de cours : bases de données distribuées et repliquées

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Pratique et administration des systèmes

Mysql avec EasyPhp. 1 er mars 2006

PHP. PHP et bases de données

BASES DE DONNEES TP POSTGRESQL

Le langage C. Séance n 4

Bases de données avancées

Java DataBaseConnectivity

Devoir Data WareHouse

TP Contraintes - Triggers

INSTALLATION DE L APPLICATION DU CONTEXTE ITASTE

COMPARAISONDESLANGAGESC, C++, JAVA ET

TP Bases de données réparties

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Algorithmique et Programmation, IMA

CREATION WEB DYNAMIQUE

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

PDO : PHP Data Object 1/13

LES ACCES ODBC AVEC LE SYSTEME SAS

Programmation système en C/C++

Java Licence Professionnelle CISII,

Introduction aux Bases de Données Relationnelles Conclusion - 1

3IS - Système d'exploitation linux - Programmation système

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

Bases de données relationnelles

SQL Parser XML Xquery : Approche de détection des injections SQL

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

PHP 5. La base de données MySql. A. Belaïd 1

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

MS SQL Express 2005 Sauvegarde des données

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Exonet : sauvegarde automatisée d une base de données

Accès aux bases de données

Réplication E-maj Foreign Data Wrapper PostGIS PostgreSQL-f

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

Gestion de stock pour un magasin

Application web de gestion de comptes en banques

Laboratoires de bases de données. Laboratoire n 6. Programmation SQL. par Danièle BAYERS et Louis SWINNEN


Présentation du PL/SQL

Cours d Algorithmique et de Langage C v 3.0

Lier Erlang avec d autres langages de programmation

PROJET 1 : BASE DE DONNÉES REPARTIES

INFO-F-404 : Techniques avancées de systèmes d exploitation

Mise en oeuvre d'une base de données mono-utilisateur avec SQLite

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

Gestion de base de données

Introduction à MATLAB R

Les bases de données

TP Programmation Java / JDBC / Oracle

laposte.net) Ministère de l'éducation nationale Atelier sécurité Rabat RALL 2007

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

PostgreSQL. Formations. Catalogue Calendrier... 8

Structure fonctionnelle d un SGBD

Bases de programmation. Cours 5. Structurer les données

SYSTÈMES D INFORMATIONS

Jérôme FESSY. IUT de Paris 5. Base de Données. Cours Introductif. Base de Données

OS Réseaux et Programmation Système - C5

Module BD et sites WEB

Rappels Entrées -Sorties

SQL Server et Active Directory

WDpStats Procédure d installation

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Magasins et entrepôts de données (Datamart, data warehouse) Approche relationnelle pour l'analyse des données en ligne (ROLAP)

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Cours Bases de données

Architectures web/bases de données

Évaluation et implémentation des langages

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

1. Base de données SQLite

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Modernisation, développement d applications et DB2 sous IBM i Technologies, outils et nouveautés Volubis.fr

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

Transcription:

Interfaçage de programmation

1 Le SGBD est-il suffisant? (1/2) Les pour : La puissance du langage de requêtes.

1 Le SGBD est-il suffisant? (1/2) Les pour : La puissance du langage de requêtes. L aspect simplification (via les vues)

1 Le SGBD est-il suffisant? (1/2) Les pour : La puissance du langage de requêtes. L aspect simplification (via les vues) Les outils 4GL (SQL Forms Oracle, pgaccess (en cours), Ms Access,...) Les procédures stockées (cf deuxième année) : premier lien entre programmation et bases de données.

2 Le SGBD est-il suffisant? (2/2) Les contre : Une action se décompose en un séquencement d étapes exemple : emprunt d un livre

2 Le SGBD est-il suffisant? (2/2) Les contre : Une action se décompose en un séquencement d étapes exemple : emprunt d un livre Problème de la cloture transitive

2 Le SGBD est-il suffisant? (2/2) Les contre : Une action se décompose en un séquencement d étapes exemple : emprunt d un livre Problème de la cloture transitive Interface Homme-Machine

2 Le SGBD est-il suffisant? (2/2) Les contre : Une action se décompose en un séquencement d étapes exemple : emprunt d un livre Problème de la cloture transitive Interface Homme-Machine Accès multi-bases

3 Point de vue des applications Objectif : Ecrire une application quelconque

3 Point de vue des applications Objectif : Ecrire une application quelconque Une contrainte : certaines données doivent être persistantes. Plus facile d utiliser une API vers un SGBD que de gérer la persistance via des fichiers.

4 Interface Langage et Bases de données Le Top! : API normalisée Un même programme pour plusieurs SGBDs Ex : JDBC, ODBC, ANSI embedded C

4 Interface Langage et Bases de données Le Top! : API normalisée Un même programme pour plusieurs SGBDs Ex : JDBC, ODBC, ANSI embedded C Le compromis : Langage de programmation standard (C, Java, Pascal,...)

4 Interface Langage et Bases de données Le Top! : API normalisée Un même programme pour plusieurs SGBDs Ex : JDBC, ODBC, ANSI embedded C Le compromis : Langage de programmation standard (C, Java, Pascal,...) API accès bases de données

4 Interface Langage et Bases de données Le Top! : API normalisée Un même programme pour plusieurs SGBDs Ex : JDBC, ODBC, ANSI embedded C Le compromis : Langage de programmation standard (C, Java, Pascal,...) API accès bases de données Possibilité d exploiter le langage SQL

4 Interface Langage et Bases de données Le Top! : API normalisée Un même programme pour plusieurs SGBDs Ex : JDBC, ODBC, ANSI embedded C Le compromis : Langage de programmation standard (C, Java, Pascal,...) API accès bases de données Possibilité d exploiter le langage SQL Les mauvais : le tout propriétaire

5 Le cas Postgres Reconnait JDBC, ODBC, embedded C

5 Le cas Postgres Reconnait JDBC, ODBC, embedded C ODBC est considéré plus comme un langage intermédiaire entre applications, moins comme une interface de programmation.

5 Le cas Postgres Reconnait JDBC, ODBC, embedded C ODBC est considéré plus comme un langage intermédiaire entre applications, moins comme une interface de programmation. Compatible PHP

5 Le cas Postgres Reconnait JDBC, ODBC, embedded C ODBC est considéré plus comme un langage intermédiaire entre applications, moins comme une interface de programmation. Compatible PHP Procédures Stockées (PLPGSQL)

5 Le cas Postgres Reconnait JDBC, ODBC, embedded C ODBC est considéré plus comme un langage intermédiaire entre applications, moins comme une interface de programmation. Compatible PHP Procédures Stockées (PLPGSQL) Interfaces possibles C (lib postgres, pgeasy, embedded C), C++, Python, TCL-TK, Perl.

6 Une application bases de données (1/2) Structuration du programme : 1. Connexion à une base : nom du serveur, nom de la base, nom de l utilisateur, mot de passe

6 Une application bases de données (1/2) Structuration du programme : 1. Connexion à une base : nom du serveur, nom de la base, nom de l utilisateur, mot de passe 2. Etablissement de requête (SQL)

6 Une application bases de données (1/2) Structuration du programme : 1. Connexion à une base : nom du serveur, nom de la base, nom de l utilisateur, mot de passe 2. Etablissement de requête (SQL) 3. Traitement de la réponse

6 Une application bases de données (1/2) Structuration du programme : 1. Connexion à une base : nom du serveur, nom de la base, nom de l utilisateur, mot de passe 2. Etablissement de requête (SQL) 3. Traitement de la réponse 4. Si non fini, retour au point 2

6 Une application bases de données (1/2) Structuration du programme : 1. Connexion à une base : nom du serveur, nom de la base, nom de l utilisateur, mot de passe 2. Etablissement de requête (SQL) 3. Traitement de la réponse 4. Si non fini, retour au point 2 5. Déconnexion

7 Une application bases de données (2/2) Aspects réseau, sécurité,... : toujours vérifier la validité de la commande envoyée

7 Une application bases de données (2/2) Aspects réseau, sécurité,... : toujours vérifier la validité de la commande envoyée Variante possible de la structuration d un programme : accès multibases. Les requêtes doivent être paramétrées par la connexion.

8 La librairie Postgres Query Appli C lib Postgres Serveur Postgres

8 La librairie Postgres Query Appli C lib Postgres Serveur Postgres Réseau Polytech Lille : /usr/include/postgresql/libpq-fe.h /usr/lib/libpq.a ou /usr/lib/libpq.so

9 Lib. Postgres : variables d environnement Les variables d environnement suivantes peuvent être utilisées afin de faciliter l écriture des programmes. nom désignation PGHOST nom du serveur PGOPTIONS options pour le serveur distant postgres PGPORT numéro du port TCP utilisé PGTTY fichier ou device tty pour l affichage des erreurs PGDATABASE nom de la base de données

10 Lib. Postgres : établissement d une connexion (1/2) PGconn *PQsetdbLogin(char *pghost, char *pgport, char *pgoptions, char *pgtty, char *dbname,char *login, char *password) ; Si un argument est positionné à NULL alors la variable d environnement correspondante est recherchée.

10 Lib. Postgres : établissement d une connexion (1/2) PGconn *PQsetdbLogin(char *pghost, char *pgport, char *pgoptions, char *pgtty, char *dbname,char *login, char *password) ; Si un argument est positionné à NULL alors la variable d environnement correspondante est recherchée. Si cette variable n est pas positionnée, les valeurs par défaut du système sont utilisées.

11 Lib. Postgres : établissement d une connexion (2/2) PQsetdbLogin retourne un pointeur sur une structure de nom PGconn.

11 Lib. Postgres : établissement d une connexion (2/2) PQsetdbLogin retourne un pointeur sur une structure de nom PGconn. La fonction PQstatus permet de s assurer de la réalisation de la connexion : deux valeurs de retour sont possibles : CONNECTION OK et CONNECTION BAD.

11 Lib. Postgres : établissement d une connexion (2/2) PQsetdbLogin retourne un pointeur sur une structure de nom PGconn. La fonction PQstatus permet de s assurer de la réalisation de la connexion : deux valeurs de retour sont possibles : CONNECTION OK et CONNECTION BAD. La fonction PQerrorMessage affiche le message d erreur associé à la connexion.

11 Lib. Postgres : établissement d une connexion (2/2) PQsetdbLogin retourne un pointeur sur une structure de nom PGconn. La fonction PQstatus permet de s assurer de la réalisation de la connexion : deux valeurs de retour sont possibles : CONNECTION OK et CONNECTION BAD. La fonction PQerrorMessage affiche le message d erreur associé à la connexion. Par la suite, la variable de type PGconn sera utilisée pour chaque accès à la base de données distante.

12 Lib. Postgres : Validité de la connexion Signature Désignation char *PQdb(PGconn *conn); nom de la base char *PQhost(PGconn *conn); nom du serveur char *PQoptions(PGconn *conn); les options char *PQport(PGconn *conn); port tcp char *PQtty(PGconn *conn) ; nom du terminal ConnStatusType *PQstatus(PGconn *conn); état char *PQerrorMessage(PGconn *conn); message d erreur

13 Lib. Postgres : exécution de commandes SQL Une nouvelle structure C est utilisée : PGresult. Cette structure contient toutes les informations nécessaires à l exploitation des résultats d une requête SQL réalisée par l intermédiaire de la routine PQexec. PGresult *PQexec(PGconn *conn,char *cmdesql) ;

13 Lib. Postgres : exécution de commandes SQL Une nouvelle structure C est utilisée : PGresult. Cette structure contient toutes les informations nécessaires à l exploitation des résultats d une requête SQL réalisée par l intermédiaire de la routine PQexec. PGresult *PQexec(PGconn *conn,char *cmdesql) ; Exploitez la fonction sprintf!

14 Lib. Postgres : validité de la requête Avant d exploiter le résultat d une requête, il faut vérifier le bon déroulement de commande SQL.

14 Lib. Postgres : validité de la requête Avant d exploiter le résultat d une requête, il faut vérifier le bon déroulement de commande SQL. Une fonction d accusé de réception : ExecStatusType PQresultStatus(PGresult *res) ;

14 Lib. Postgres : validité de la requête Avant d exploiter le résultat d une requête, il faut vérifier le bon déroulement de commande SQL. Une fonction d accusé de réception : ExecStatusType PQresultStatus(PGresult *res) ; Le type énuméré ExecStatusType peut prendre les valeurs : PGRES COMMAND OK (la requête est une commande), PGRES TUPLES OK, PGRES EMPTY QUERY, PGRES BAD RESPONSE, PGRES NONFATAL ERROR, PGRES FATAL ERROR. La fonction char *PQcmdStatus(PGresult *res) permet d afficher l état de la dernière commande.

15 Lib. Postgres : traitement résultat Requête Analyse de la structure PGresult : Signature et Désignation int PQntuples(PGresult *res) nbre de tuples int PQnfields(PGresult *res) nbre d attributs char *PQfname(PGresult *res,int field_index) nom des attributs char *PQfnumber(PGresult *res, char *field_name) index de l attribut char *PQgetvalue(PGresult *res,int tup_num,int field_num) valeur de l attribut L index commence à partir de la valeur 0

16 Lib. Postgres : traitement de plusieurs requêtes Il est nécessaire de libérer la mémoire associée à une variable de type PGresult quand on ne l utilise plus ou quand on l utilise pour une autre requête.

16 Lib. Postgres : traitement de plusieurs requêtes Il est nécessaire de libérer la mémoire associée à une variable de type PGresult quand on ne l utilise plus ou quand on l utilise pour une autre requête. Cela est réalisé par la procédure : void PQclear(PQresult *res)

17 Lib. Postgres : fermeture de la connexion Les deux fonctions suivantes permettent de terminer une connexion à une base de données distante : void PQfinish(PGconn *conn); : termine la connexion. void PQreset(PGconn *conn); : réinitialise une connexion.

18 Couche logicielle supplémentaire Lib. Postgres pgeasy

18 Couche logicielle supplémentaire Basée sur la lib. Postgres Lib. Postgres pgeasy

18 Lib. Postgres pgeasy Couche logicielle supplémentaire Basée sur la lib. Postgres Fonctions plus simples : (moins de paramètres)

18 Lib. Postgres pgeasy Couche logicielle supplémentaire Basée sur la lib. Postgres Fonctions plus simples : (moins de paramètres) Couvre les requêtes élémentaires

19 #include <stdio.h> #include <libpq-fe.h> #include <libpgeasy.h> pgeasy : Un exemple (1/2) int main(void) { char cmdesql[256], ligne[1000] ; connectdb("dbname=test"); printf("sql?") ; scanf("%s", cmdesql) ;

20 } pgeasy : Un exemple (2/2) doquery(cmdesql) ; while (fetch(ligne)!= END_OF_TUPLES) printf("%s\n", ligne); disconnectdb(); return 0;

21 pgeasy : en un coup d œil PGresult *doquery(char *query); PGconn *connectdb(char *options); void disconnectdb(void); int fetch(void *param,...); int fetchwithnulls(void *param,...); void on_error_continue(void); void on_error_stop(void); PGresult *get_result(void); void set_result(pgresult *newres); void unset_result(pgresult *oldres); void reset_fetch(void); #define END_OF_TUPLES (-1)

22 API sommaire! pgeasy : commentaires

22 pgeasy : commentaires API sommaire! Les inconvénients d un langage de script (absence de typage)...sans les avantages (compilation nécessaire)

22 pgeasy : commentaires API sommaire! Les inconvénients d un langage de script (absence de typage)...sans les avantages (compilation nécessaire) nécessite lib. Postgres!

23 Embedded C (ECPG) Normalisation ANSI applications non liés à un SGBD

23 Embedded C (ECPG) Normalisation ANSI applications non liés à un SGBD Principe : Appli pgc + SQL préprocesseur ECPG Appli C lib Postgres Serveur Postgres

24 Préprocesseur : ecpg ECPG : compilation

24 ECPG : compilation Préprocesseur : ecpg Même principe que le préprocesseur C

24 ECPG : compilation Préprocesseur : ecpg Même principe que le préprocesseur C Directive EXEC SQL

24 ECPG : compilation Préprocesseur : ecpg Même principe que le préprocesseur C Directive EXEC SQL Librairies : libecpg.a ou libecpg.so

25 ECPG : sections de déclaration Sections délimitées par : exec sql begin declare section ;... exec sql end declare section ;

25 ECPG : sections de déclaration Sections délimitées par : exec sql begin declare section ;... exec sql end declare section ; Uniquement déclaration de variables

25 ECPG : sections de déclaration Sections délimitées par : exec sql begin declare section ;... exec sql end declare section ; Uniquement déclaration de variables Variables partagées entre le préprocesseur et le code C. Lien entre types SQL et types C.

26 ECPG : section d inclusion Notation :exec sql include nomfichier ;

26 ECPG : section d inclusion Notation :exec sql include nomfichier ; Ca ne génère pas : #include <nomfichier> Cette section copie le contenu du fichier dans le code C résultat

26 ECPG : section d inclusion Notation :exec sql include nomfichier ; Ca ne génère pas : #include <nomfichier> Cette section copie le contenu du fichier dans le code C résultat Peut donc être utilisé pour spécifier des commandes exec sql

26 ECPG : section d inclusion Notation :exec sql include nomfichier ; Ca ne génère pas : #include <nomfichier> Cette section copie le contenu du fichier dans le code C résultat Peut donc être utilisé pour spécifier des commandes exec sql Pour détecter les erreurs, insérer dans le code C, la ligne : exec sql include sqlca;

27 ECPG : section de connexion Notation : exec sql connect to connection target ;

27 ECPG : section de connexion Notation : exec sql connect to connection target ; Etablit une connexion à la base distante

27 ECPG : section de connexion Notation : exec sql connect to connection target ; Etablit une connexion à la base distante connection target peut prendre les syntaxes suivantes : dbname[@server][:port][as connection name][user...] tcp:postgresql://server[:port][/dbname] [as connection name][user...] unix:postgresql://server[:port][/dbname] [as connection name][user...] user peut prendre les syntaxes suivantes: user userid user userid/password user userid using password

28 ECPG : section de déconnexion Notation : exec sql disconnect [connection target] ;

28 ECPG : section de déconnexion Notation : exec sql disconnect [connection target] ; connection target peut prendre les formes : connection name, current, all.

29 ECPG : Exécution de requêtes Notation : exec sql requete SQL

29 ECPG : Exécution de requêtes Notation : exec sql requete SQL Notation : exec sql at nom connection requete SQL

29 ECPG : Exécution de requêtes Notation : exec sql requete SQL Notation : exec sql at nom connection requete SQL Tous les types de requêtes possibles (create, insert,...)

29 ECPG : Exécution de requêtes Notation : exec sql requete SQL Notation : exec sql at nom connection requete SQL Tous les types de requêtes possibles (create, insert,...) Structure C sqlca donne des informations sur l exécution de la requête Exemple : sqlca.sqlerrd[1] indique le nombre de lignes créées, modifiées,...

29 ECPG : Exécution de requêtes Notation : exec sql requete SQL Notation : exec sql at nom connection requete SQL Tous les types de requêtes possibles (create, insert,...) Structure C sqlca donne des informations sur l exécution de la requête Exemple : sqlca.sqlerrd[1] indique le nombre de lignes créées, modifiées,... Possibilité de préparer, paramétrer des requêtes via des variables

30 ECPG : récupération des données une ligne résultat Utilisation : select...into :nom variable1, :nom variable2,...

30 ECPG : récupération des données une ligne résultat Utilisation : select...into :nom variable1, :nom variable2,... Seules les variables C définies dans les sections de déclaration sont utilisables.

30 ECPG : récupération des données une ligne résultat Utilisation : select...into :nom variable1, :nom variable2,... Seules les variables C définies dans les sections de déclaration sont utilisables. Ne fonctionne que lorsqu il y a qu une ligne résultat

31 ECPG : récupération de plusieurs lignes de données Utilisation de curseurs, principe : 1. Déclaration d un curseur pour une requête exec sql declare nomcurseur cursor for select...

31 ECPG : récupération de plusieurs lignes de données Utilisation de curseurs, principe : 1. Déclaration d un curseur pour une requête exec sql declare nomcurseur cursor for select... 2. Ouverture du curseur : exec sql open nomcurseur

31 ECPG : récupération de plusieurs lignes de données Utilisation de curseurs, principe : 1. Déclaration d un curseur pour une requête exec sql declare nomcurseur cursor for select... 2. Ouverture du curseur : exec sql open nomcurseur 3. Disposer d un mécanisme pour quitter la future boucle de lecture : exec sql whenever not found do break ;

31 ECPG : récupération de plusieurs lignes de données Utilisation de curseurs, principe : 1. Déclaration d un curseur pour une requête exec sql declare nomcurseur cursor for select... 2. Ouverture du curseur : exec sql open nomcurseur 3. Disposer d un mécanisme pour quitter la future boucle de lecture : exec sql whenever not found do break ; 4. Dans boucle de lecture, lecture d une ligne : exec sql fetch from nomcurseur into :nom var1,...

31 ECPG : récupération de plusieurs lignes de données Utilisation de curseurs, principe : 1. Déclaration d un curseur pour une requête exec sql declare nomcurseur cursor for select... 2. Ouverture du curseur : exec sql open nomcurseur 3. Disposer d un mécanisme pour quitter la future boucle de lecture : exec sql whenever not found do break ; 4. Dans boucle de lecture, lecture d une ligne : exec sql fetch from nomcurseur into :nom var1,... 5. Fermeture du curseur :exec sql close nomcurseur

32 ECPG : un exemple complet (1/5) Ouverture de la base template1 sur weppes, calcul du nombre d utilisateurs et affichage des noms de ces utilisateurs.

32 ECPG : un exemple complet (1/5) Ouverture de la base template1 sur weppes, calcul du nombre d utilisateurs et affichage des noms de ces utilisateurs. le nom et le mot de passe de l utilisateur courant est passé en paramètre.

33 ECPG : un exemple complet (2/5) /*********************************************************/ /* exempleecpg.pgc */ /* lit sur la ligne de commande : */ /* le nom d un utilisateur et son mot de passe */ /* affiche ensuite le nombre de lignes de pg_user */ /* ainsi que le champ usename de cette table */ /*********************************************************/ int main(int argc, char * argv[]) { exec sql include sqlca ; /* gestion des codes d erreurs */

34 ECPG : un exemple complet (3/5) exec sql begin declare section ; char user[30] char password[30] ; int nbre ; varchar usename[8] ; exec sql end declare section ; if (argc!= 3) { fprintf(stderr,"erreur, usage: %s user passwd\n", argv[0]) ; return 1 ; } strcpy(user, argv[1]) ; strcpy(password,argv[2]) ;

35 ECPG : un exemple complet (4/5) exec sql connect to template1@weppes :5432 as connect_weppes user :user using :password ; exec sql at connect_weppes select count(*) into :nbre from pg_user ; printf("nombre d utilisateurs : %d\n",nbre) ;

36 ECPG : un exemple complet (5/5) exec sql declare moncurseur cursor for select usename from pg_user ; exec sql open moncurseur ; exec sql whenever not found do break ; while (1) { exec sqlfetch from moncurseur into :usename ; printf(" nom user : %s\n", usename) ; } } exec sql close moncurseur ; exec sql disconnect connect_weppes ;