1 / 23

Connexion en mode application

Connexion en mode application. 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

lorant
Download Presentation

Connexion en mode application

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Connexion en mode application

  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é) 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 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 Bases de données - Yann Loyer

  5. Cycle de vie d’un programme ex.pc ex.c Précompilateur oracle Programme source Programme source modifié Éditeur de texte Compilateur standard Programme exécutable Editeur de liens Programme objet ex.out ex.o Bibliothèque oracle 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 Bases de données - Yann Loyer

  7. Structure d’un programme Un programme ProC est composé de deux sections: • Prologue de l’application • Corps de l’application Bases de données - Yann Loyer

  8. Prologue (1) • Cette partie est divisée en 3 sous-sections : • Section INCLUDE • Section DECLARE • Section CONNECT 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 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; 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 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; } Bases de données - Yann Loyer

  13. Requêtes Deux façons de traiter les requêtes : • Requête renvoyant un seul n-uplet • Requête renvoyant un nombre quelconque de n-uplets 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 … 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 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(); } 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(); } Bases de données - Yann Loyer

  18. Exemple de programme void déconnexion() { EXEC SQL commit release; compte_rendu(); } 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 ); } 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; } } 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 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(); 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( ); } Bases de données - Yann Loyer

More Related