Hãy thử điều này:
select X.COUNTRYNAME, Y.STATENAME
from XMLTEMP
,xmltable('/countries/country'
passing MYDOC
columns COUNTRYNAME varchar2(20) path './name',
STATES xmltype path './states') X,
xmltable('/states/state/name' passing X.STATES
columns STATENAME varchar2(20) path '.') (+) Y
Bởi vì bạn có nhiều trạng thái, bạn nên tham gia vào một bảng xml khác. Vì một số quốc gia không có tiểu bang nên nó cần phải là một liên kết bên ngoài bên trái. Tôi đang sử dụng phương thức cũ của (+)
vì tôi đang thử điều này vào lúc 10g và có vẻ như có sự cố khi sử dụng left outer join
trong 10g nhưng rõ ràng là nó sẽ ổn trong 11g
.