Paweł Koźbiał

Paweł Koźbiał Student,
Politechnika
Częstochowska

Temat: [Oracle] Odczyt danych z tabeli typu XMLType

Witam, mam tabelę cv typu XMLType w bazie Oracle z takimi danymi:
<zbior>
<cv>
<dane_osobowe>
<imie>Święty</imie>
<nazwisko>Mikołaj</nazwisko>
<adres>
<ulica>Choinkowa 113</ulica>
<miasto>Chmura ?niegowa</miasto>
</adres>
<telefon>nieznany</telefon>
<data_urodzenia>1573</data_urodzenia>
</dane_osobowe>
<jezyki>
<jezyk>
<nazwa>Angielski</nazwa>
<stopien>Doskonały</stopien>
</jezyk>
<jezyk>
<nazwa>Niemiecki</nazwa>
<stopien>Przeciętny</stopien>
</jezyk>
<jezyk>
<nazwa>Rosyjski</nazwa>
<stopien>Słaby</stopien>
</jezyk>
</jezyki>
<szkolenia>Dziwaczne</szkolenia>
</cv>
</zbior>

Dlaczego zapytanie:
SELECT EXTRACT(VALUE(c), '//cv[contains(jezyki/jezyk/nazwa, "Angielski")]') FROM cv c

zwraca poprawny wynik,

a zapytanie:
SELECT EXTRACT(VALUE(c), '//cv[contains(jezyki/jezyk/nazwa, "Niemiecki")]') FROM cv c

zwraca NULL?
Łukasz Schabek

Łukasz Schabek Architekt Rozwiązań

Temat: [Oracle] Odczyt danych z tabeli typu XMLType

Cześć,

Spróbuj tak:


SELECT EXTRACT(VALUE(c), '//cv/jezyki/jezyk[nazwa="Niemiecki"]') FROM cv c
Krzysztof Helbin

Krzysztof Helbin starszy programista,
COIG S.A.

Temat: [Oracle] Odczyt danych z tabeli typu XMLType

Łukasz Schabek:
Cześć,

Spróbuj tak:


SELECT EXTRACT(VALUE(c), '//cv/jezyki/jezyk[nazwa="Niemiecki"]') FROM cv c

Cześć

ja proponuję lekką modyfikację (zakładam, że wynikiem zapytania miało być całe CV a nie node z językiem jak wyżej):


SELECT EXTRACT(value(c), '//cv[//jezyki/jezyk/nazwa="Rosyjski"]') FROM cv c;


powyższe zapytanie zwraca wynik zgodny z zapytaniem Pawła.
Paweł Koźbiał

Paweł Koźbiał Student,
Politechnika
Częstochowska

Temat: [Oracle] Odczyt danych z tabeli typu XMLType

Tą tabelę którą podałem to jest tylko wycinek, tutaj jest cała
http://dl.dropbox.com/u/36628119/cv_xml

Łukasz twoje zapytanie też nie działa, ponieważ zwraca ono wszystkie dane jakie są w tabeli, nawet te, które nie zawierają języka o podanej nazwie.
Krzysztof Helbin

Krzysztof Helbin starszy programista,
COIG S.A.

Temat: [Oracle] Odczyt danych z tabeli typu XMLType

No to może tak:


SELECT XMLQuery(
'for $i in /zbior/cv
where $i/jezyki/jezyk/nazwa = "Angielski"
return $i'
PASSING value(c) RETURNING CONTENT) "cv-ki"
FROM cv c;


powyższe zapytanie zwraca cv-ki ze znajomością danego języka.



Wyślij zaproszenie do