Documente Academic
Documente Profesional
Documente Cultură
Actualité du cours
https://twitter.com/darmont_lyon2 #bda
Objectifs du cours
1
18/09/2018
2
18/09/2018
3
18/09/2018
4
18/09/2018
Tableaux Variables
ex. notes NUMERIC(2, 2)[]; ex. n := 0;
matrice INTEGER[][]; n := n + 1;
5
18/09/2018
6
18/09/2018
7
18/09/2018
Paramètres de sortie CREATE OR REPLACE FUNCTION serie(taille INT, pas INT) RETURNS SETOF INT AS $$
DECLARE
CREATE OR REPLACE FUNCTION calculs(n1 INT, n2 INT, OUT somme INT, OUT produit INT) AS $$ i INT;
-- Pas de RETURN BEGIN
BEGIN FOR i IN 1..taille BY pas LOOP
somme := n1 + n2;
RETURN NEXT i;
produit := n1 * n2;
END
END LOOP;
$$ LANGUAGE plpgsql; RETURN;
END
SELECT calculs(4, 5); -- Sous forme d’enregistrement (valeurs uniquement) $$ LANGUAGE plpgsql;
-- ou
SELECT * FROM calculs(4, 5); -- Sous forme de table (avec entêtes somme et produit) SELECT serie(10, 2);
Bases de données avancées http://eric.univ-lyon2.fr/~jdarmont/ 29 Bases de données avancées http://eric.univ-lyon2.fr/~jdarmont/ 30
CREATE OR REPLACE FUNCTION droleDeDiv(n1 INT, n2 INT) RETURNS REAL AS $$ CREATE OR REPLACE FUNCTION facto(n INTEGER) RETURNS INTEGER AS $$
DECLARE
DECLARE
f INTEGER;
s INT; BEGIN
p INT; IF n = 1 THEN -- Condition d'arrêt
BEGIN RETURN 1;
SELECT * INTO s, p FROM calculs(n1, n2); ELSE
RETURN p / s ::REAL; SELECT * INTO f FROM facto(n - 1); -- Appel récursif
END RETURN n * f;
$$ LANGUAGE plpgsql; END IF;
END
$$ LANGUAGE plpgsql;
SELECT droleDeDiv(5, 6);
SELECT facto(10);
Bases de données avancées http://eric.univ-lyon2.fr/~jdarmont/ 31 Bases de données avancées http://eric.univ-lyon2.fr/~jdarmont/ 32
8
18/09/2018
9
18/09/2018
10
18/09/2018
11
18/09/2018
Introduction
Bases du langage Définition : Fonction associée à une table et exécutée
automatiquement lorsque des événements liés à des actions sur la
Curseurs table surviennent (mises à jour, principalement).
12
18/09/2018
NEW : Enregistrement contenant le n-uplet inséré ou modifié -- Emulation de clé primaire sur la table EMP
13
18/09/2018
Introduction
Exemples
Bases du langage – Fonction qui met la table EMP à jour
SQL statique (la requête est connue à la compilation)
Curseurs
– Fonction qui met à jour une table dont le nom est un paramètre
Gestion des erreurs SQL dynamique (la requête complète n’est pas connue à la compilation)
14
18/09/2018
15
18/09/2018
Quizz Plan
Question n° 106
SQL dynamique
Plan
Partie 2 Introduction
XML/XQuery
Documents XML
Langage XQuery
– XPath
– Requêtes FLWOR
– Requêtes complexes
16
18/09/2018
Non-structurées
Années 1990 – Un même attribut peut avoir des types différents
Moteurs de recherche
Langages de requête
17
18/09/2018
18
18/09/2018
19
18/09/2018
Règles d’écriture d’un document XML (1/2) Règles d’écriture d’un document XML (2/2)
Un document XML a un et un seul élément racine. Les noms d’éléments commençant par XML (dans toutes combinaisons
de minuscules et majuscules) sont réservés à des fins de
Les éléments doivent être correctement emboîtés (les balises ouvrantes standardisation.
et fermantes ne doivent pas se chevaucher).
Tout élément doit avoir une balise ouvrante et une balise fermante. Un document XML respectant ces règles est dit bien formé.
Le nom d’un élément doit être identique dans la balise ouvrante et la Un document XML doit être bien formé !
balise fermante.
Un document XML peut de plus être valide s’il se conforme à la
Les noms d’éléments sont sensibles à la casse. Ils doivent commencer
par une lettre ou par _ suivi(e) de lettres, de chiffres, de . , de – ou de _. structure définie dans une DTD ou un Schéma XML.
Document Type Definition XML Schema
20
18/09/2018
21
18/09/2018
Contenu d’élément XML vs. attributs (1/2) Contenu d’élément XML vs. attributs (2/2)
Principe Élément Attribut
Que choisir ? Contenu principal Information essentielle Information périphérique
– <professeur> Information structurée Information hiérarchisée Information atomique
<nom>Darmont</nom> Lisibilité Utilisateur.trice humain.e Traitement automatique
</professeur>
Relation élément/attribut Information précisée par une autre
– <professeur nom="Darmont" />
Exemple de relation <stock>
élément/attribut <produit quantité="1500">
<nom>Ordinateur</nom>
4 principes pour décider </produit>
– Uche Ogbuji, Fourthought, Inc. <produit quantité="500">
<nom>Imprimante</nom>
– Source : http://www.ibm.com/developerworks/xml/library/x-eleatt/ </produit>
</stock>
Bases de données avancées http://eric.univ-lyon2.fr/~jdarmont/ 85 Bases de données avancées http://eric.univ-lyon2.fr/~jdarmont/ 86
Quizz Plan
Question n° 141
Bases de données avancées http://eric.univ-lyon2.fr/~jdarmont/ 87 Bases de données avancées http://eric.univ-lyon2.fr/~jdarmont/ 88
22
18/09/2018
23
18/09/2018
Un élément donné Un élément donné quel que soit son niveau hiérarchique
doc("dvd.xml")/catalogue/dvd doc("dvd.xml")/catalogue//titre
doc("dvd.xml")/catalogue/dvd/titre //titre
Résultat Résultat
<titre>Blade runner</titre> <titre>Blade runner</titre>
<titre>La grande vadrouille</titre> <titre>La grande vadrouille</titre>
<titre>Le fabuleux destin d'Amélie Poulain</titre> <titre>Le fabuleux destin d'Amélie Poulain</titre>
<titre>The big Lebowski</titre> <titre>The big Lebowski</titre>
Bases de données avancées http://eric.univ-lyon2.fr/~jdarmont/ 93 Bases de données avancées http://eric.univ-lyon2.fr/~jdarmont/ 94
24
18/09/2018
Documents XML Clause For (1/3) : lie une variable à chaque élément retourné par
une expression (itération)
Langage XQuery Exemple
XPath for $x in (1 to 3) <!-- Ceci est un commentaire -->
return <res>{$x}</res>
– Requêtes FLWOR
– Requêtes complexes Résultat
<res>1</res>
<res>2</res>
<res>3</res>
Bases de données avancées http://eric.univ-lyon2.fr/~jdarmont/ 99 Bases de données avancées http://eric.univ-lyon2.fr/~jdarmont/ 100
25
18/09/2018
Exemple Exemple
for $x in (1, 2), for $x at $i in doc("dvd.xml")/catalogue/dvd/titre
$y in (10, 20) (: Ceci est également un commentaire :) return <dvd id="{$i}">{data($x)}</dvd>
return <res>x = {$x} et y = {$y}</res>
Résultat Résultat
<res>x = 1 et y = 10</res> <dvd id="1">Blade runner</dvd>
<res>x = 1 et y = 20</res> <dvd id="2">La grande vadrouille</dvd>
<res>x = 2 et y = 10</res> <dvd id="3">Le fabuleux destin d'Amélie Poulain</dvd>
<res>x = 2 et y = 20</res> <dvd id="4">The big Lebowski</dvd>
Bases de données avancées http://eric.univ-lyon2.fr/~jdarmont/ 101 Bases de données avancées http://eric.univ-lyon2.fr/~jdarmont/ 102
26
18/09/2018
Exemple Exemple
for $x in doc("dvd.xml")/catalogue/dvd for $x in doc("dvd.xml")/catalogue/dvd
order by $x/titre return if ($x/@zone="1")
return $x/titre then <zoneUS>{data($x/titre)}</zoneUS>
else <zoneEU>{data($x/titre)}</zoneEU>
Exemple
for $x in doc("dvd.xml")/catalogue/dvd Résultat
order by $x/@zone, $x/titre descending
<zoneUS>Blade runner</zoneUS>
return $x/titre
<zoneEU>La grande vadrouille</zoneEU>
<zoneEU>Le fabuleux destin d'Amélie Poulain</zoneEU>
Clause Return : Spécifie le résultat <zoneEU>The big Lebowski</zoneEU>
Bases de données avancées http://eric.univ-lyon2.fr/~jdarmont/ 105 Bases de données avancées http://eric.univ-lyon2.fr/~jdarmont/ 106
Bases de données avancées http://eric.univ-lyon2.fr/~jdarmont/ 107 Bases de données avancées http://eric.univ-lyon2.fr/~jdarmont/ 108
27
18/09/2018
28
18/09/2018
29
18/09/2018
Quizz Plan
Question n° 510
Bases de données avancées http://eric.univ-lyon2.fr/~jdarmont/ 117 Bases de données avancées http://eric.univ-lyon2.fr/~jdarmont/ 118
Sondage express
30