Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
enseignement:tp:bd:tp-xml-sql [2012/07/03 13:32] ecoquery créée |
enseignement:tp:bd:tp-xml-sql [2017/10/23 16:38] ecoquery [XMLAgg] |
||
---|---|---|---|
Ligne 58: | Ligne 58: | ||
On se replace dans le contexte d'une base de données sur le forum de discussions. Ecrire une requête qui pour chaque message génère un // | On se replace dans le contexte d'une base de données sur le forum de discussions. Ecrire une requête qui pour chaque message génère un // | ||
- | <color black/# | + | <wrap important> |
select xmlelement(name " | select xmlelement(name " | ||
xmlelement(name " | xmlelement(name " | ||
Ligne 76: | Ligne 76: | ||
Ecrire une requête qui pour chaque message génère un // | Ecrire une requête qui pour chaque message génère un // | ||
- | <color black/# | + | <wrap important> |
select xmlelement(name " | select xmlelement(name " | ||
xmlattributes(id as " | xmlattributes(id as " | ||
Ligne 87: | Ligne 87: | ||
Que peut-on remarquer sur la casse des nom d' | Que peut-on remarquer sur la casse des nom d' | ||
- | <color black/# | + | <wrap important> |
select xmlelement(name " | select xmlelement(name " | ||
xmlattributes(id as " | xmlattributes(id as " | ||
Ligne 106: | Ligne 106: | ||
Modifier la requête précédente en utilisant cette fonction pour mettre le corps du message dans un // | Modifier la requête précédente en utilisant cette fonction pour mettre le corps du message dans un // | ||
- | <color black/# | + | <wrap important> |
select xmlelement(name " | select xmlelement(name " | ||
xmlattributes(message.id as " | xmlattributes(message.id as " | ||
Ligne 112: | Ligne 112: | ||
auteur as " | auteur as " | ||
xmlforest(corps, | xmlforest(corps, | ||
- | from message, | + | from message, |
- | where auteur=utilisateur.id; | + | where auteur=membre.id; |
</ | </ | ||
Ligne 128: | Ligne 128: | ||
Modifier la requête précédente pour ajouter à chaque élément message un // | Modifier la requête précédente pour ajouter à chaque élément message un // | ||
- | <color black/# | + | <wrap important> |
select xmlelement(name " | select xmlelement(name " | ||
xmlattributes(m1.id as " | xmlattributes(m1.id as " | ||
Ligne 137: | Ligne 137: | ||
XMLAttributes(m2.id as " | XMLAttributes(m2.id as " | ||
) as resultat | ) as resultat | ||
- | from message m1, message m2, utilisateur | + | from message m1, message m2, membre |
- | where m1.id = m2.parent and m1.auteur=utilisateur.id | + | where m1.id = m2.parent and m1.auteur=membre.id |
group by m1.id, m1.date_envoi, | group by m1.id, m1.date_envoi, | ||
</ | </ | ||
Ligne 144: | Ligne 144: | ||
Remplacer la jointure sur les messages par un LEFT OUTER JOIN. Que peut-on remarquer pour les messages n' | Remplacer la jointure sur les messages par un LEFT OUTER JOIN. Que peut-on remarquer pour les messages n' | ||
- | <color black/# | + | <wrap important> |
select xmlelement(name " | select xmlelement(name " | ||
xmlattributes(m1.id as " | xmlattributes(m1.id as " | ||
Ligne 153: | Ligne 153: | ||
XMLAttributes(m2.id as " | XMLAttributes(m2.id as " | ||
) as xml | ) as xml | ||
- | from message m1 left outer join message m2 on m1.id = m2.parent, | + | from message m1 left outer join message m2 on m1.id = m2.parent, |
- | where m1.auteur=utilisateur.id | + | where m1.auteur=membre.id |
group by m1.id, m1.date_envoi, | group by m1.id, m1.date_envoi, | ||
</ | </ | ||
- | <color black/# | + | <wrap important>Les messages sans réponse possèdent un élément < |
Ligne 165: | Ligne 165: | ||
Créer une vue qui à chaque identifiant de message associe sa représentation XML telle que décrite ci-dessus. | Créer une vue qui à chaque identifiant de message associe sa représentation XML telle que décrite ci-dessus. | ||
- | <color black/# | + | <wrap important> |
| | ||
| | ||
Ligne 182: | Ligne 182: | ||
Créer une vue qui crée un document XML contenant l' | Créer une vue qui crée un document XML contenant l' | ||
- | <color black/# | + | <wrap important> |
create or replace view messages_xml as | create or replace view messages_xml as | ||
select xmlelement(name " | select xmlelement(name " | ||
Ligne 188: | Ligne 188: | ||
from message_id_xml; | from message_id_xml; | ||
</ | </ | ||
- | <color black/# | + | <wrap important> |
- | On peut tester avec:</color> | + | On peut tester avec:</wrap> |
<code sql> | <code sql> | ||
select (messages) | select (messages) | ||
Ligne 224: | Ligne 224: | ||
- | <color black/# | + | <wrap important> |
SELECT XMLQuery(' | SELECT XMLQuery(' | ||
let $msg := $m/message, | let $msg := $m/message, | ||
Ligne 248: | Ligne 248: | ||
Faire une vue de la requête précédente, | Faire une vue de la requête précédente, | ||
- | <color black/# | + | <wrap important> |
- | Pour créer la première vue, il suffit d' | + | Pour créer la première vue, il suffit d' |
<code sql> | <code sql> | ||
create or replace view tous_messages_html as | create or replace view tous_messages_html as | ||
Ligne 261: | Ligne 261: | ||
from message_html; | from message_html; | ||
</ | </ | ||
- | <color black/# | + | <wrap important>Pour tester:</ |
<code sql> | <code sql> | ||
select (html_code) from tous_messages_html | select (html_code) from tous_messages_html | ||
</ | </ | ||