1 / 37

Programmation d’application

Programmation d’application. INT. Plan du document. Contexte slide 1 Programmer avec une BD slide 2 Client-Serveur SQL et architecture 3 rangs slide 13 JDBC slide 14 Serveurs d’applications et « portails » slide 19 PL/SQL slide 20. Contexte.

kasa
Download Presentation

Programmation d’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. Programmation d’application INT

  2. Plan du document • Contexte slide 1 • Programmer avec une BD slide 2 • Client-Serveur SQL et architecture 3 rangs slide 13 • JDBC slide 14 • Serveurs d’applications et « portails » slide 19 • PL/SQL slide 20 Bases de Données

  3. Contexte • Limites du SQL interactif : • absence de structure de contrôle • absence de variable • Pas de « calcul » sur les données  •  Adopter un langage de type procédural • SQL doit rester le seul langage d'accès aux données Bases de Données

  4. Programmer avec une BD Programmer avec une BD • Générateurs d’application sur BD : • Interface au dessus LDD LMD • But :  productivité  • Programmation vISuelle (QBE, QBF, LV) • L4G : • Maquettage d’écrans • Enchaînement des actions  triggers • Scripts associés aux objets graphiques  SQL + LPG (PL/SQL) • AGL Bases de Données

  5. Programmer avec une BD Interfaces SQL LPG • Solutions : • Embedded SQL dans un L3G • SQL/CLI • PSM (Persistent Stored Modules) Bases de Données

  6. Programmer avec une BD Embedded SQL dans un L3G • Précompilé, compilé • Dépendant du SGBD cible • Problèmes • 2 systèmes de types, 2 styles de programmation •  « Impedance mismatch » == « dysfonctionnement » NUMBER(x) int?, long ? DECIMAL(x,y), NUMBER(x,y) float ?, double ? VARCHAR(x) char(x+1)?, String NULL ??? Bases de Données

  7. Programme source (C+SQL) Précompilation Programme source Requêtes BD sans cde SQL compilation Traitement Plan d'exécution code objet Librairies Linkage Stockage programme exécutable BD Programmer avec une BD Embedded SQL DD Bases de Données

  8. Programmer avec une BD SQL/CLI • Bas niveau •  compilé uniquement •  syntaxe moins concISe • Interface universelle SGBD SQL • Indépendance / SGBD • Imbrication « sans couture » du SQL dans langage hôte • ODBC, JDBC Bases de Données

  9. Programmer avec une BD PSM • Inconvénient des deux approches précédentes • Impedance mismatch • Code procédural du côté client  coût réseau • SQL « procédural » • PL/SQL • « Routines » SQL • Triggers • C/S 2ème génération BEGIN FOR i = 1 to 4 SELECT END Ordre SQL BD Ordre SQL Ordre SQL Client Serveur SQL Ordre SQL Bases de Données

  10. Architecture client/serveur • SQL/CLI et Embedded SQL • Procédure anonyme • Procédure stockée BD Moteur PL/SQL Serveur SQL PL/SQL Client BD Moteur PL/SQL Serveur SQL RPC Client Proc stockée PL/SQL Bases de Données

  11. Architecture client/serveur • Triggers SQL UPDATE delete INSERT BD Moteur PL/SQL Serveur SQL Client Proc stockée PL/SQL Bases de Données

  12. Programmer avec une BD Interfaces SQL LPG Bases de Données

  13. Client-Serveur SQL et architecture 3 rangs Site 1 Client léger : navigateur http • Terminal : navigateur • C/S HTTP • Frontal : Serveur + passerelle • C/S SQL • Dorsal : SGBD Middleware http Site 2 Serveur http Passerelle CGI  SQL Middleware SQL Site 3 Serveur SQL Bases de Données

  14. JDBC • Reprise des idées de ODBC dans le monde Java • Indépendance / SGBD cible • Recours à des pilotes • Code portable de bout en bout • Pas forcément construit au dessus de ODBC • Autres API peuvent être définies à partir de JDBC Bases de Données

  15. Pilotes JDBC • JDBC non supporté en natif par les SGBD du commerce • Transformations des appels JDBC en appels natifs • 4 catégories de pilotes en fonctions de : • La présence ou non de pilote SGBD (non java) sur le client • Protocole de communication entre le client Java et le serveur Bases de Données

  16. Principes JDBC • Connexion (se lie à un SGBD particulier avec un nom d’utilISateur) • Création de requête (statements) • Exécution de requête (execute) • Récupération des résultats (resultset et next()) • Opérations transactionnelles (commit, abort) Bases de Données

  17. 2-tiers JDBC Applet Java Navigateur HTML JDBC Machine client IHM JDBC Protocole propriétaire SGBD SGBD Machine serveur BD Oracle Bases de Données

  18. 3-tiers JDBC Applet Java Navigateur HTML Machine client IHM HTTP, RMI, appels IIOP - CORBA Serveur d’application JDBC Machine serveur Business Logic Protocole propriétaire SGBD SGBD Machine serveur BD Oracle Bases de Données

  19. Serveurs d’applications et « portails » • ReconnaISsant les utilisateurs : • Multiplier les « cookies » • Vues adaptatives construites au fur et à mesure des requêtes et parcours • Intégrant de multiples applications « servlets » • Intégrant de multiples sources de données « wrappers » Bases de Données

  20. PL/SQL

  21. Introduction Option procédurale d’Oracle Objectifs Caractéristiques de PL/SQL Procédure anonyme PL/SQL par l’exemple Curseur explicite Curseur « FOR » C+SQL avec PL/SQL Procédure PL/SQL Fonction PL/SQL Gestion des erreurs Package Manipulation des procédures Gestion des procédures Appel des procédures/fonctions Trigger Plan du document Bases de Données

  22. Option procédurale d’Oracle • Extension de SQL • Programming Language SQL • Procédure stockées • Procédures • Fonctions • Packages • Triggers Bases de Données

  23. Objectifs • Partager le code applicatif niveau serveur • Application cliente L3G (C, Java) • Application cliente L4G (Developper 2000, …) • Centraliser les règles de gestion • Optimiser les performances • Accroître la sécurité Bases de Données

  24. Caractéristiques PL/SQL • Types de données : BD + composites • Structures de contrôle • Modularité (bloc, procédure, fonction, package) • Gestion des erreurs (exception) • Interface BD intégrée (SQL, curseur) • Calculs • Volontairement décorrélé des pb d’E/S Bases de Données

  25. Procédure anonyme • Syntaxe DECLARE déclaration des variables locales BEGIN suite d’instructions PL/SQL EXCEPTION suite d’instructions PLSQL END; RUN; exécution de la procédure Bases de Données

  26. Bloc avec curseur explicite DECLARE CURSOR c IS SELECT * FROM produits WHERE qte = 0; p produits%ROWTYPE; BEGIN OPEN c; LOOP FETCH c INTO p; EXIT WHEN c%NOTFOUND; INSERT INTO RupStock VALUES (SYSDATE, p.noprod); END LOOP; CLOSE c; COMMIT; END; Bases de Données

  27. Bloc avec curseur « FOR » DECLARE CURSOR c IS SELECT * FROM produits WHERE qte = 0; BEGIN FOR p IN c LOOP INSERT INTO RupStock VALUES (SYSDATE, p.noprod); END LOOP; COMMIT; END; Bases de Données

  28. #include <stdio.h> EXEC SQL BEGIN DECLARE SECTION VARCHAR nom[20]; VARCHAR piece[4]; int nodpt; VARCHAR status[50]; VARCHAR uid[20]; VARCHAR passwd[20]; EXEC SQL END DECLARE SECTION; EXEC SQL INCLUDE sqlca; main(){ /* lecture des caractéristiques d’un nouvel employé EXEC SQL EXECUTE DECLARE -- var locales PL/SQL BEGIN INSERT INTO emp VALUES (:nom, …) Exception --TRT Exception END; END-EXEC; } C + SQL avec PL/SQL Bases de Données

  29. Procédure PL/SQL CREATE PROCEDURE RuptureStock IS CURSOR c IS SELECT * FROM produits; BEGIN FOR p IN c LOOP IF p.qte = 0 THEN INSERT INTO RupStock VALUES (SYSDATE, p.noprod); END IF; END LOOP; COMMIT; END RuptureStock; Bases de Données

  30. Procédure PL/SQL CREATE PROCEDURE RuptureStockProduit (p Produits%ROWTYPE) IS BEGIN IF p.qte = 0 THEN INSERT INTO RupStock VALUES (SYSDATE, p.noprod); END IF; COMMIT; END RuptureStockProduit; Bases de Données

  31. Fonction PL/SQL CREATE FUNCTION NbEmp (nodpt INTEGER) return INTEGER IS nb INTEGER; BEGIN SELECT count(e.noemp) INTO nb FROM employes e WHERE e.nodpt=nodpt; return (nb); END NbEmp; Bases de Données

  32. Gestion des erreurs CREATE PROCEDURE Augmenter (noEmp INTEGER, augmentation REAL) IS salaire REAL; salaire_manquant EXCEPTION; BEGIN SELECT sal INTO salaire FROM employes WHERE num= noEmp; IF salaire IS NULL THEN RAISE salaire_manquant else UPDATE employes SET sal = salaire + augmentation WHERE num = noEmp; END if; Exception WHEN NO_DATA_FOUND THEN INSERT INTO resu VALUES (noEmp, ‘inexistant’); WHEN salaire_manquant THEN INSERT INTO resu VALUES (noEmp, ‘sans salaire’); END Augmenter; Bases de Données

  33. Packages CREATE PACKAGE employe IS PROCEDURE Embaucher (nom VARCHAR2); PROCEDURE Augmenter(noEmp INTEGER, augmentation REAL); PROCEDURE Partir(noEmp INTEGER); END Employe; CREATE PACKAGE body employe IS PROCEDURE Embaucher (nom VARCHAR2) IS …. ; PROCEDURE Augmenter (noEmp INTEGER, augmentation REAL) IS …; PROCEDURE Partir(noEmp INTEGER) IS …; END employe; Bases de Données

  34. Manipulation des procédures • CREATE [PROCEDURE|FUNCTION|PACKAGE|PACKAGE BODY] • Création + compilation • CREATE or replace ..; • Modification + compilation • Grant • Grant execute on Augmenter to chefs; • Drop [PROCEDURE|FUNCTION|PACKAGE|PACKAGE BODY] • Suppression Bases de Données

  35. Gestion des procédures • Stockage des procédures dans le serveur • Format source + Format compilé • Optimisation des ordres SQL des procédures • Gestion automatiques des dépendances entre les procédures et les autres objets de la BD • Exécution d’une procédure avec les droits d’accès de son créateur Bases de Données

  36. Appel d’une fonction/procédure • Outil sql*plus Execute employe.Augmenter(10, 300); • Dans une fonction ou une procédure : Employe.augmenter(10, 300); RuptureStockProduit(p) • Dans une requête SQL SELECT * FROM departement d WHERE NbEmp(d.nodpt) > 10 • Dans un programme Embedded SQL À partir d’un bloc PL/SQL • Dans un outil de devt :Developper 2000 • Trigger Bases de Données

  37. Trigger CREATE trigger verifier_salaire IS BEFORE INSERT or UPDATE OF sal, poste ON employes FOR each row WHEN new.job != ‘PDG’) DECLARE minsal NUMBER; maxsal NUMBER; BEGIN SELECT min(sal), max(sal) INTO minsal, maxsal FROM employes WHERE poste = :new.poste; IF (:new.sal < minsal or :new.sal > maxsal) THEN RAISE en_dehors_borne; ELSIF (:new.sal < :old.sal) THEN RAISE augmentation_negative; ELSIF (:new.sal > 1.1 * :old.sal) THEN RAISE augmentation_importante; EXCEPTION … END; Bases de Données

More Related