programmation d’application

37
Programmation d’application INT

Upload: kasa

Post on 06-Jan-2016

37 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Programmation d’application

Programmation d’application

INT

Page 2: Programmation d’application

Bases de Données 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

Page 3: Programmation d’application

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

Page 4: Programmation d’application

Bases de Données 4

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

Programmer avec une BD

Page 5: Programmation d’application

Bases de Données 5

Interfaces SQL LPG

Solutions : Embedded SQL dans un L3G SQL/CLI PSM (Persistent Stored Modules)

Programmer avec une BD

Page 6: Programmation d’application

Bases de Données 6

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 ???

Programmer avec une BD

Page 7: Programmation d’application

Bases de Données 7

Embedded SQLProgramme source (C+SQL)

Précompilation

Programme source Requêtes BD

sans cde SQL

compilation Traitement

code objet LibrairiesPlan d'exécution

Linkage Stockage

programme exécutable BD

Programmer avec une BD

DD

Page 8: Programmation d’application

Bases de Données 8

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

Programmer avec une BD

Page 9: Programmation d’application

Bases de Données 9

Ordre SQLOrdre SQL

Ordre SQLOrdre SQL

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

Programmer avec une BD

Client

BEGIN FOR i = 1 to 4 SELECTEND

Serveur SQL BD

Page 10: Programmation d’application

Bases de Données 10

Architecture client/serveur

SQL/CLI et Embedded SQL Procédure anonyme

Procédure stockée

ClientServeur SQL BD

Moteur PL/SQLPL/SQL

ClientServeur SQL BD

Moteur PL/SQL

RPC

Proc stockéePL/SQL

Page 11: Programmation d’application

Bases de Données 11

Architecture client/serveur

Triggers

ClientServeur SQL BD

Moteur PL/SQL

Proc stockéePL/SQL

SQL UPDATE

delete INSERT

Page 12: Programmation d’application

Bases de Données 12

Interfaces SQL LPGProgrammer avec une BD

Approche Java Autres langages

Embedded SQL SQLJ Pro*C

SQL/CLI JDBC ODBC

PSM PL/SQL

Page 13: Programmation d’application

Bases de Données 13

Client-Serveur SQL et architecture 3 rangs Terminal : navigateur

C/S HTTP

Frontal : Serveur + passerelle

C/S SQL

Dorsal : SGBD

Client léger : navigateur http

Serveur http

Passerelle CGI SQL

Serveur SQL

Middleware http

Middleware SQL

Site 1

Site 2

Site 3

Page 14: Programmation d’application

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

Page 15: Programmation d’application

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

Page 16: Programmation d’application

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)

Page 17: Programmation d’application

Bases de Données 17

2-tiers JDBCApplet Java

Navigateur HTML

JDBC

SGBD

Protocole propriétaire SGBD

Machine clientIHM

JDBC

Machine serveur BDOracle

Page 18: Programmation d’application

Bases de Données 18

3-tiers JDBCApplet Java

Navigateur HTML

Serveur d’application

JDBC

SGBD

HTTP, RMI, appels IIOP - CORBA

Protocole propriétaire SGBD

Machine clientIHM

Machine serveurBusiness Logic

Machine serveur BDOracle

Page 19: Programmation d’application

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 »

Page 20: Programmation d’application

PL/SQL

Page 21: Programmation d’application

Bases de Données 21

Plan du document

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

Page 22: Programmation d’application

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

Page 23: Programmation d’application

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é

Page 24: Programmation d’application

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

Page 25: Programmation d’application

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

Page 26: Programmation d’application

Bases de Données 26

Bloc avec curseur explicite

DECLARECURSOR c IS

SELECT * FROM produits WHERE qte = 0;p produits%ROWTYPE;

BEGINOPEN c;LOOP

FETCH c INTO p;EXIT WHEN c%NOTFOUND;INSERT INTO RupStock VALUES (SYSDATE, p.noprod);

END LOOP;CLOSE c;COMMIT;

END;

Page 27: Programmation d’application

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;

Page 28: Programmation d’application

Bases de Données 28

C + SQL avec PL/SQL

#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;

}

Page 29: Programmation d’application

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;

Page 30: Programmation d’application

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;

Page 31: Programmation d’application

Bases de Données 31

Fonction PL/SQLCREATE 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;

Page 32: Programmation d’application

Bases de Données 32

Gestion des erreursCREATE PROCEDURE Augmenter (noEmp INTEGER, augmentation REAL) IS

salaire REAL;salaire_manquant EXCEPTION;

BEGINSELECT salINTO salaireFROM employesWHERE num= noEmp;IF salaire IS NULL THEN

RAISE salaire_manquantelse

UPDATE employesSET sal = salaire + augmentationWHERE num = noEmp;

END if;Exception

WHEN NO_DATA_FOUND THENINSERT INTO resu VALUES (noEmp, ‘inexistant’);

WHEN salaire_manquant THENINSERT INTO resu VALUES (noEmp, ‘sans salaire’);

END Augmenter;

Page 33: Programmation d’application

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;

Page 34: Programmation d’application

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

Page 35: Programmation d’application

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

Page 36: Programmation d’application

Bases de Données 36

Appel d’une fonction/procédure

Outil sql*plusExecute employe.Augmenter(10, 300);

Dans une fonction ou une procédure :Employe.augmenter(10, 300);RuptureStockProduit(p)

Dans une requête SQLSELECT *FROM departement dWHERE NbEmp(d.nodpt) > 10

Dans un programme Embedded SQLÀ partir d’un bloc PL/SQL

Dans un outil de devt :Developper 2000 Trigger

Page 37: Programmation d’application

Bases de Données 37

TriggerCREATE trigger verifier_salaire IS

BEFORE INSERT or UPDATE OF sal, poste ON employesFOR each row WHEN new.job != ‘PDG’)

DECLAREminsal NUMBER;maxsal NUMBER;

BEGINSELECT min(sal), max(sal) INTO minsal, maxsalFROM employesWHERE 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;