connexion en mode application. bases de données - yann loyer2 connexion en mode application pour...

23
Connexion en mode application

Upload: ansell-pellerin

Post on 04-Apr-2015

107 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Connexion en mode application

Page 2: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 2

Connexion en mode application

• Pour tout type d’utilisateurs :– passif, actif, gérant

• Permettre l’accès au SGBD à partir d’un langage de haut niveau (C, JAVA, …)

• Problèmes BD – traités exactement comme en interactif– + programmation non BD pour :

• Calculs• Conversationnel• Contrôle (ex: récursivité)

Page 3: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 3

Principe

• Programme classique (C, JAVA,…)

+ connexion serveur

+ tout ordre SGBD

+ gestion de la communication client/serveur

• Pour résoudre des problèmes :– utiliser les mêmes ordres qu’en mode interactif

Page 4: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 4

Cycle de vie d’un programme

• Ordres SGBD inclus :– ne sont pas des instructions du langage hôte– lors de la précompilation

• détectés

• Remplacés par du C

– lors de l’exécution• transmis au serveur

Page 5: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 5

Cycle de vie d’un programme

Éditeur detexte

Programmesource

Précompilateuroracle

Programmesource modifié

Compilateurstandard

Programmeobjet

Editeurde liens

Programmeexécutable

Bibliothèqueoracle

ex.pc ex.c

ex.oex.out

Page 6: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 6

Vocabulaire

• C : langage hôte

• Programme s’exécutant : client en mode application

• Ordres SGBD : ordres inclus (embedded SQL statements)

• Variables hôtes : variables qui hébergent les valeurs SGBD

Page 7: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 7

Structure d’un programme

Un programme ProC est composé de deux sections:

1. Prologue de l’application

2. Corps de l’application

Page 8: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 8

Prologue (1)

• Cette partie est divisée en 3 sous-sections :

1. Section INCLUDE

2. Section DECLARE

3. Section CONNECT

Page 9: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 9

Prologue (2)

• Section INCLUDE permet la mise en action de certaines options par utilisation de variables

#INCLUDE<SQLCA.H>• Par défaut, ProC ignore toutes les erreurs et

continue l’exécution si possible• Exemples de variables

– sqlca.sqlcode – Sqlca.sqlwarn

Page 10: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 10

Prologue (3)

• La section DECLARE contient les définitions de variables hôtes

EXEC SQL BEGIN DECLARE SECTION;

int numemp;

char nomemp[10];

int numdep;

EXEC SQL END DECLARE SECTION;

Page 11: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 11

Prologue (4)

• Section CONNECT : tout programme ProC doit effectuer une connexion à un SGBD Oracle avant d’accéder aux données

• EXEC SQL CONNECT :user IDENTIFIED BY :password;

• Cette commande SQL doit être la première commande exécutable du programme ProC

Page 12: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 12

Corps de l’application• Cette partie contient le corps du programme ProC. Exemple#include<sqlca.h>EXEC SQL BEGIN DECLARE SECTION; varchar uid[20]; varchar pwd[20];EXEC SQL END DECLARE SECTION;main( ){ strcpy(uid.arr,’SCOTT’); uid.len = strlen(uid.arr); strcpy(pwd.arr,’TIGER’); pwd.len = strlen(pwd.arr);

EXEC SQL CONNECT :uid IDENTIFIED BY :pwd; printf(« connecté à Oracle comme utilisateur : %s », uid.arr); EXEC SQL CREATE TABLE VINS(NV number, Nom varchar(15), Domaine varchar(25)); printf(« Table VINS créée »); EXEC SQL COMMIT WORK;}

Page 13: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 13

Requêtes

Deux façons de traiter les requêtes :

1. Requête renvoyant un seul n-uplet

2. Requête renvoyant un nombre quelconque de n-uplets

Page 14: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 14

Requêtes

Requête renvoyant un seul n-uplet

SELECT att1,…,attn

INTO :var1, …, :varn

FROM table1,…,tablem

WHERE …

Page 15: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 15

Exemple

Situation :

• Train ( client varchar(20),

destination varchar(20),

jour integer

km integer );

• Hypothèse : une seule destination par client

• Objectif : afficher la destination et le jour de Félix

Page 16: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 16

Exemple de programme #include<stdio.h>#include<string.h>#include<sqlca.h>

void connexion();void interrogation();void déconnexion();void compte_rendu();

main(){connexion();interrogation();déconnexion();}

Page 17: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 17

Exemple de programme void connexion(){EXEC SQL begin declare section; char hs_login[8]; char hs_passwd[8];EXEC SQL end declare section;

strcpy(uid.arr,’SCOTT’); uid.len = strlen(uid.arr); strcpy(pwd.arr,’TIGER’); pwd.len = strlen(pwd.arr);

EXEC SQL connect :hs_login identified by :hs_passwd ;compte_rendu();}

Page 18: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 18

Exemple de programme

void déconnexion()

{

EXEC SQL commit release;

compte_rendu();

}

Page 19: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 19

Exemple de programme void interrogation(){EXEC SQL begin declare section; char hs_dest[20]; int hi_jour;EXEC SQL end declare section;

EXEC SQL select destination, jour into :hs_dest, :hi_jour ; from train where client = « Félix »;

compte_rendu();printf( « Félix va à %s le jour %d », hs_dest, hi_jour );}

Page 20: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 20

Exemple de programme

void compte_rendu()

{

If (sqlca.sqlcode < 0)

{

printf( « Ordre non exécuté : %s », sqlca.sqlerrm.sqlerrmc);

exit;

}

}

Page 21: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 21

Requêtes • Lorsque la requête retourne plusieurs n-uplets, le

résultat est stocké dans un curseur DECLARE CURSOR OPEN CURSOR FETCH CLOSE CURSOR

• Un curseur est une zone de travail utilisée par Oracle pour stocker le résultat d’une requête

Page 22: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 22

Exemple de programme void selection(){Char tampon[100];EXEC SQL begin declare section; int hi_km; char hs_dest[20]; int i_dest;EXEC SQL end declare section;

gets(tampon);hi_km = atoi(tampon);EXEC SQL DECLARE requête CURSOR FOR select destination from train where km < :hi_km ;

EXEC SQL OPEN requête;compte_rendu();

Page 23: Connexion en mode application. Bases de données - Yann Loyer2 Connexion en mode application Pour tout type dutilisateurs : –passif, actif, gérant Permettre

Bases de données - Yann Loyer 23

EXEC SQL FETCH requête INTO :hs_dest:i_dest ; /* i_dest variable indicatrice */

gestion_erreur( );

while ((sqlca.sqlcode>=0) && (sqlca.sqlcode!=1403))

{

if (i_dest == -1) printf(« destination inconnue »);

else printf(« %s\n »,hs_dest);

EXEC SQL FETCH requête INTO :hs_dest:i_dest ;

gestion_erreur( );

}

EXEC SQL CLOSE requête;

gestion_erreur( );

}