I SQL Server, bl.a. ved hjælp af XML PATH,
Tom Jones
B
<;/bruger>
Mary Doe
A
...
SELECTEller Hvis din database støtter SQL/XML-standarden , gerne Oracle 10gR2 eller DB2 v9, kan du bruge SQL/XML forlagsvirksomhed funktioner. Her er Oracle 10gR2 variant, bemærk, at nogle af detaljerne vil skulle ændres for at få det til at fungere på DB2.
UserID som '@ id',
navn som navn,
rating som menig
fra brugere FOR XML PATH ( 'bruger'), root ( "brugere")
SELECTI XQuery vi kunne skrive følgende. Bemærk den elegance af den løsning, som genereres XML er læsbare i forespørgslen,
xmlelement (navn "brugere",
(SELECT
xmlagg (
xmlelement (navn "bruger",
xmlattributes (UserID som id),
xmlelement (navn "navn", NAVN),
xmlelement (navn " rating "," rating ")
)
)
fra brugere)
)
FRA DUAL
Lad? s nu udvide det eksisterende XML, og omfatter for alle brugere af tilbuddene er placeret. Forestil Dem, vi ønsker følgende slags resultat,(
for $ u i indsamling ( "brugere")/USERS
vende tilbage
($ u/navn/tekst ()}
($ u/rating/tekst ()}
)
Desværre, sådan XML-struktur ikke kan genereres via SQL Server's FOR XML PATH, og vi er nødt til at bruge FOR XML eksplicit. Hvis du? Re bekendt med det, jeg? M sikker på, at du sætter pris på nogle af detaljerne i FOR XML PATH konstruere i SQL Server. Lad mig give det en chance,
Tom Jones
B
400
1999-02-14
40
1999-03-05
...
SELECTOg hvis du har en SQL/XML baggrund, her er en Oracle 10gR2 forenelig forespørgslen,
tag,
moder,
[brugere! 1!],
[Bruger! 2! Id],
[bruger! 2! navn! Element],
[bruger! 2! rating! Element],
[bud! 3!],
[bud! 4! id] ,
[bud! 4! bud! Element],
[bud! 4! dato! Element]
FRA (
SELECT
1 som tag,
NULL som moderselskaber,
0 AS Sorter,
NULL AS 'brugere! 1! ",
NULL AS' bruger! 2! Id ',
NULL AS' bruger! 2 ! navn! Element ",
NULL AS 'bruger! 2! rating! Element",
NULL AS' bud! 3! ",
NULL AS 'bud! 4! id',
NULL AS 'bud! 4! bud! Element ",
NULL AS' bud! 4! dato! Element '
UNION ALL
SELECT
2 som tag,
1 som moderselskaber,
konvertere (heltal, substring (UserID, 2,2)) * 100 AS Sorter,
NULL,
UserID,
NAVN,
Rating,
NULL, NULL, NULL, NULL
fra brugere
UNION ALL
SELECT
3 som tag,
2 som moder,
Konvertere (heltal, substring (UserID, 2,2)) * 100 + 1 AS Sorter,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
fra brugere
UNION ALL
SELECT
4 AS-tag,
3 som moderselskaber,
konvertere (heltal, substring (UserID, 2,2)) * 100 + 2 AS Sorter,
NULL, NULL, NULL, NULL, NULL,
UserID,
BID,
BID_DATE
FRA TILBUDDENE
) A
KENDELSE AF Sorter
FOR XML KLAR
SELECTDen XQuery udgave er mere præcis, mere læsbare og som en konsekvens mere vedligeholdelse,
xmlelement (navn "brugere",
(SELECT
xmlagg (
xmlelement (navn "bruger",
xmlattributes (u.USERID som id),
xmlelement (navn "navn", u.NAME) ,
xmlelement (navn "rating", u.RATING),
xmlelement (navn "tilbud",
(SELECT
xmlagg (
xmlelement (navn "tilbud" ,
xmlattributes (b.ITEMNO som id),
xmlelement (navn "tilbud", b.BID),
xmlelement (navn "dato", b.BID_DATE)
)
)
FRA TILBUDDENE b
HVOR b.USERID = u.USERID)
)
)
)
fra brugere u)
)
FRA DUAL
Der er en subtil forskel mellem ovenstående SQL og XQuery forespørgsler. I SQL, hvad enten det er SQL/XML-standarden eller Microsoft SQL Server? S FOR XML tilgang, element byggeri er sprunget over i tilfælde af NULL data. Dette er ikke tilfældet med XQuery forespørgsler. Overvej følgende forespørgsel fra oven,(
for $ u i indsamling ( "brugere")/USERS
vende tilbage
($ u/navn/tekst ( ))
($ u/rating/tekst ()}
(
for $ b i indsamling ( " Bud ")/Tilbudene
hvor $ b/UserID = $ u/UserID
vende tilbage
($ b/BID/tekst ()}
($ b/BID_DATE/tekst ()}
)
)
Hvis for nogle registrere i vores database, navn eller menige er NULL, den(
for $ u i indsamling ( "brugere")/USERS
vende tilbage
($ u/navn/tekst ()}
($ u/rating/tekst ()) <;/rating>
)
Hvis vi bare vælge de data, og tilføje element entreprenøren som sidste skridt i den sti udtryk, vi får den ønskede effekt.($ u/rating/tekst ()}
$ u/rating/Hvis nogle bruger den rating er NULL, derefter $ u/klassificering vil evaluere til den tomme sekvens, som en konsekvens af( ./text ()}
anvende dette til vores forespørgsel har vi følgende,
Jeg håber dette indlæg gav en følelse af magt og enkelhed, når det kommer til at offentliggøre relationelle data som XQuery.(
for $ u i indsamling ( "brugere")/brugere
Vende tilbage
(
$ u/UserID/attributten id {.},
$ u/NAVN/(./Text ()}
$ u/rating/(./text ()}
)
)
Alle stillinger i XQuery for SQL Programmør serien er ca søgninger din relationelle databaser. Næste vi? Ll drøfte opdateringer. Kan du opdatere dine data via XQuery, og hvordan ser det ud sammenlignet med, hvad du er vant til i SQL? Tech Tags: XQuery SQL ###!! !!### 1297
Ingen kommentarer:
Send en kommentar