Zielony Smok - logo witryny

Apache Derby: operator XMLQUERY

Opis

Pobiera dane z kolumn typu XML

Składnia

XMLQUERY (string PASSING BY REF value [RETURNING SEQUENCE [BY REF]] EMPTY ON EMPTY)

Objaśnienia

‘string’ musi być ‘stringiem’, który jest jednocześnie prawidłowym wyrażeniem XPath obsługiwanym przez Apache Xalan. Więcej informacji o XPath można znaleźć, według dokumentacji Derby, na tej stronie.

‘string’ nie może być parametrem ani wyrażeniem, które nie jest literałem, albo literałem, który jest np. typu int . Derby nie obługuje XQuery, ponieważ używa Xalan-u, który nie obsługuje tego standardu.

‘value’ musi być typu XML i musi być prawidłowym dokumentem SQL/XML. Nie może być parametrem. Ponieważ Derby nie wykonuje domyślnego parsowania ani rzutowania XML, dlatego nie można używać ‘stringów’ ani innych typów danych. Może być wynikiem zwracanym przez XMLQUERY, pod warunkiem, że jest to sekwencja złożona tylko z jednego węzła, który jest węzłem dokumentu.

BY REF jest jedynym sposobem zwracania wartości i jest wartością domyślną, więc może być pominięty.

RETURNING SEQUENCE może być pominięte, gdyż dotyczy jedynej możliwej zwracanej wartości (XML), która jest jednocześnie wartością domyślną.

EMPTY ON EMPTY – jest elementem obowiązkowym. Oznacza, że wartości puste są zwracane jako sekwencja i nie są zamieniane na wartość null.

Zwracaną wartością jest wartość typu XML i jest sekwencją węzłów albo wartości. Nie ma gwarancji, że wynik będzie prawidłowym dokumentem XML i dlatego może zaistnieć sytacja, że wynik nie będzie mógł być użyty w operatorze XMLPARSE. Aby wynik mógł być zapamiętany w kolumnie typu XML musi on być sekwencją z dokładnie jedną jednostką w sekwencji i musi być prawidłowym węzłem dokumentu.

Aby obejrzeć wynik, należy użyć operatora XMLSERIALIZE.

Przykład 1

SELECT id, XMLSERIALIZE(XMLQUERY('//pies[country=\"PL\"]' PASSING BY REF pies EMPTY ON EMPTY) AS CLOB) FROM psy

Niezależnie czy XMLQUERY zwraca wynik czy nie to w zbiorze wynikowym znajdą się i tak wszystkie wyniki. Aby je odczytać z CLOB należy użyć stosownych metod JDBC.

Przykład 2

Aby w ‘Przykładzie 1’ prawidłowo odczytać wyniki należy użyć operatora XMLEXISTS w po słowie kluczowym WHERE, np.

WHERE XMLEXISTS('//pies[@country=\"PL\"]' PASSING BY REF pies)

Przykład

Przykład zbiorczy dla operatorów XML znajduje się we wpisie Apache Derby: operatory XML