SQL et Langages de Programmation



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

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

Attaques applicatives

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

Bases de données avancées

Devoir Data WareHouse

Panorama des Bases de Données

Programmation d application Bases de données avec Java

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

Bases de données cours 1

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)

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

Introduction aux Bases de Données Relationnelles Conclusion - 1

IFT3030 Base de données. Chapitre 2 Architecture d une base de données

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

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

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

Panorama des Bases de Données

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

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

Mysql avec EasyPhp. 1 er mars 2006

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

PHP 4 PARTIE : BASE DE DONNEES

PDO : PHP Data Object 1/13

MS SQL Express 2005 Sauvegarde des données

Bases de données avancées Introduction

TP Programmation Java / JDBC / Oracle

TP Bases de données réparties

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Le Langage SQL version Oracle

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

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

1 Introduction et installation

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

Java DataBaseConnectivity

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

OpenPaaS Le réseau social d'entreprise

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry

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

Module BD et sites WEB

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

Olivier Mondet

CREATION WEB DYNAMIQUE

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


TP Contraintes - Triggers

Chapitre 10. Architectures des systèmes de gestion de bases de données

Algorithmique et Programmation, IMA

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

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

SQL Historique

OLAP : Mondrian + Pentaho. Maguelonne Teisseire Hugo Alatrista Salas hugo.alatrista- salas@teledetec9on.fr Flavien Bouillot

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

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

Accès aux bases de données

APIs de table pour SQL Server

Introduction aux Bases de Données 2004/2005

Java et les bases de données

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

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Présentation du PL/SQL

Évaluation et optimisation de requêtes

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

CHAPITRE 1 ARCHITECTURE

BASES DE DONNEES TP POSTGRESQL

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)

Initiation aux bases de données (SGBD) Walter RUDAMETKIN

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Introduction au langage C

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

Bases de Données Avancées PL/SQL

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Gestion de base de données

PROJET 1 : BASE DE DONNÉES REPARTIES

Cours Bases de données

Projet Viticulture - TP 3 : bases de données distantes BTS Services informatiques aux organisations

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Bases de données relationnelles

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Cours Base de données relationnelles. M. Boughanem, IUP STRI

Le Langage De Description De Données(LDD)

Quelques aspects du Relationnel-Objet du SGBD Oracle

CATALOGUE FORMATIONS DOMAINE Bases de données

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Bases de données et sites WEB Licence d informatique LI345

Intégrité des données

TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique

Bases de Données Réparties Concepts et Techniques. Matthieu Exbrayat ULP Strasbourg - Décembre 2007

Administration des bases de données. Jean-Yves Antoine

Le langage SQL Rappels

1. Base de données SQLite

2 Serveurs OLAP et introduction au Data Mining

A QUOI SERVENT LES BASES DE DONNÉES?

Comment Créer une Base de Données Ab Initio

Transcription:

SQL et Langages de Programmation SQL est un langage bases de données autonome. Langage ensembliste de haut niveau Il faut un langage de programmation, pour programmer des applications de gestion o Notion de variables, structures de contrôles, etc. o SQL est exécuté à l'intérieur d'un programme d'application Nécessité de coupler SQL avec un langage plus classique (dit langage hôte) «Impedence mismatch» o SQL : haut niveau, traitement ensembliste, données persistantes, accès par valeur o Langage programmation : algorithmique, données temporaires, accès par adresse Couplage fort ou couplage faible? Najib Tounsi 1

SQL et Langages de programmation : Couplage Fort SQL est augmenté d un ensemble de constructions intégrées permettant son usage en programmation. Intégration cohérente, un seul compilatur. o E.g. types tuple, relation, etc (cf. Pascal-Relationnel) o Traitement ensembliste intégré au langage (e.g. instruction foreach etc. ) Plus ou moins un nouveau langage de programmation (nouveau compilateur, etc.) PL/SQL, entre autres, est un exemple commercial (oracle) Dans une moindre mesure PHP/Mysql, JDBC etc. (voir après) Les L4Gs aussi sont de ce type. Solutions propriétaires Najib Tounsi 2

SQL et Langages de programmation : Solution type middleware Usage d une API qui fait l interface entre le programme et le serveur BD (moteur SQL) PHP/..SQL o mysql_select_db("store",$link); o $result = mysql_query("select * FROM employee",$link); o $row = mysql_fetch_row($result) o echo mysql_result($result,0,ename); o printf("", $row[0], $row[1], $row[2], $row[3], $row[4]); Du coté du programme on manipule des données de types courants du langage hôte. Variables ((e.g. $link, $result, $row...) ) remplies par appel à des fonctions prédéfinies (API orientée SQL). Cf. JDBC Najib Tounsi 3

SQL et Langages de programmation : Couplage Faible SQL est exécuté à l'intérieur d'un programme d'application. Les requêtes SQL sont incorporées aux instructions d'un programme. On dit «Embedded SQL» ESQL. ESQL/C, ESQL/COBOL, ESQL/Java, ESQL/Fortran, etc. sont tous des produits standards. En principe toute requête SQL directe peut aussi être exécutée dans un programme. Réutilisation des langages existants Principe de préprocesseur. Exemple Pro*C precompiler de Oracle Najib Tounsi 4

EMBEDDED SQL Source ESQL/C Préprocesseur Code SQL pur Code C pur Processeur SQL Compilateur Plan d'exécution Module Objet Editeur de lien Module exécutable Najib Tounsi 5

Exemple simple ESQL/C Programme qui supprime de la base le produit "P2" main(){ EXEC SQL BEGIN DECALRE SECTION; char * SQLSTATE; EXEC SQL END DECALRE SECTION;... EXEC SQL DELETE FROM P WHERE P.NumP = 'P2';... if (SQLSTATE == '00000') printf ("%f\n", "Suppression OK"); else /* Erreur...*/ } A noter: l EXEC SQL pour distinguer lignes SQL pure. l SQLSTATE pour renseigner sur le déroulement de la requête. l Déclarée dans DECALRE SECTION. Najib Tounsi 6

2e Exemple simple ESQL/C Notion de variable C dans SQL, avec requête à tuple unique. main(){ EXEC SQL BEGIN DECALRE SECTION; char [5] xnump; float xprix; char * SQLSTATE; EXEC SQL END DECALRE SECTION; scanf("%s", xnump); /* ou autre source d'entrée */ EXEC SQL SELECT P.Prix INTO :xprix FROM P WHERE P.NumP = :xnump; if (SQLSTATE == '00000') printf ("%f\n", xprix); else /* Erreur...*/ } Najib Tounsi 7

A noter: l EXEC SQL pour distinguer lignes SQL pure. l Variables C particulières déclarées dans DECALRE SECTION. l SQLSTATE pour renseigner sur l'exécution de SQL l Requête mono-tuple ici! l Résultat récupéré dans variable C. Clause INTO. l SQLSTATE 00000 Succès 01xxx Warning particulier 02000 Succès mais résultat vide autres Exception SQL Najib Tounsi 8

3e Exemple simple ESQL/C Requête à résultat multi-tuples. Notion de CURSOR, avec instruction FETCH INTO pour extraire les valeurs retrouvées. SQLSTATE main(){ EXEC SQL BEGIN DECALRE SECTION; char [5] xnump; float xprix; char * SQLSTATE; EXEC SQL END DECALRE SECTION;... EXEC SQL DECLARE X CURSOR FOR SELECT P.Nump, P.Prix FROM P Order by Nump;... EXEC SQL OPEN X; EXEC SQL FETCH X INTO :xnump, :xprix; do while (SQLSTATE!= '02000'){ printf ("%s, %f\n", xnump, xprix); EXEC SQL FETCH X INTO :xnump, :xprix; }... EXEC SQL CLOSE X; } Najib Tounsi 9

A noter: l X est un curseur qui reçoit le résultat de l'expression SELECT. l X sera parcouru ligne par ligne, dans l'ordre pré défini par order by. l Ce sera EXEC SQL OPEN X qui exécutera la requête SELECT. l Après OPEN, FETCH retrouve une ligne et affecte les champs aux variables INTO. l FECTH en suite fait avancer le curseur vers la ligne suivante l FECTH doit donc apparaître à l'intérieur d'une boucle. l SQLSTATE 02000 est la valeur quand FECTH ne trouve plus de ligne? l... Najib Tounsi 10

SQL DYNAMIQUE Exemples précédents, requête SQL connue à l'écriture du programme. Cas où la requête n'est connue qu'au moment de l'exécution. Exemple: application ISQL! Tantque (existe requête utilisateur ) Saisir requête LDD / LMD exécuter requête Najib Tounsi 11

Exemple simple ESQL/C SQL DYNAMIQUE (1) Requête SQL connue à l'exécution. Notion de PREPARE et EXECUTE l Exemple 1: Exécution de SQL défini à l'exécution. A noter: EXEC SQL BEGIN DECLARE SECTION; char hostvarstmt[50]; EXEC SQL END DECLARE SECTION; strcpy(hostvarstmt, "DELETE FROM P WHERE Nump = 'P24'"); EXEC SQL PREPARE stmt FROM :hostvarstmt; EXEC SQL EXECUTE stmt; l PREPARE compile le contenu défini dans FROM, (comme si EXEC SQL PREPARE Stmt FROM "DELETE FROM P WHERE Nump = 'P24'") l et crée le plan d'exécution stmt, exécuté ensuite par SQL EXECUTE. l Aspect dynamique: La requête entrée au clavier (ou provient de menu...) scanf("%s", hostvarstmt); EXEC SQL PREPARE stmt FROM :hostvarstmt; EXEC SQL EXECUTE stmt; Najib Tounsi 12

Exemple simple ESQL/C SQL DYNAMIQUE (2) l Cas particulier: On peut faire PREPARE et EXECUTE en une seule instruction EXECUTE IMMEDIATE strcpy(stmt, "CREATE TABLE matable( macolonne INTEGER)"); EXEC SQL EXECUTE IMMEDIATE :stmt; l Sauf pour SELECT. l Pour INTO, comment savoir le nombre, le nom et le type des colonnes retournées? l Pour plusieurs lignes, on utilise CURSOR et FETCH. l Usage de DESCRIBE sur le résultat de PREPARE Najib Tounsi 13

Exemple simple ESQL/C SQL DYNAMIQUE l DESCRIBE offre structure (SQL Dynamic Area, SQLDA) permettant de connaître: (Schéma simplifié) l SQLN Nombre de valeurs dans SQLVAR (nombre de colonnes). Retourné par PREPARE, utilisé par DESCRIBE l SQLDABC (Taille du SQLDA) l SQLD (nombre de colonne retrouvées) l SQLVAR ( Tableau descriptif des colonnes retrouvées) l SQLTYPE (code pour le type d'une colonne) l SQLLEN (Taille d'une colonne) l SQLNAME (Nom d'une colonne) Najib Tounsi 14

Exemple simple ESQL/C squelette de SELECT DYNAMIQUE (3) EXEC SQL BEGIN DECLARE SECTION; char stmt1_str[200]; EXEC SQL END DECLARE SECTION; EXEC SQL INCLUDE SQLDA; EXEC SQL DECLARE DYN_CURSOR CURSOR FOR STMT1_NAME; /* reference en avant */ /* code pour avoir une requête SELECT */ EXEC SQL PREPARE STMT1_NAME FROM :stmt_str; /* tester SQLN pour allouer SQLDA */ EXEC SQL DESCRIBE STMT1_NAME INTO :sqlda; /* Verifier si SQLN == SQLD (il n'y a pas de LOB) /* code pour utiliser SQLDA... */ EXEC SQL OPEN DYN_CURSOR;... /* boucle d'accès aux données... */ EXEC SQL FETCH DYN_CURSOR USING DESCRIPTOR :sqlda;.etc. Najib Tounsi 15

SQL et Langages de programmation : Couplage «fort» Exemple de PL/SQL Voir : TP. Najib Tounsi 16