당신은 012,391,144를 사용할 수있는 요소 이름에 와일드 카드 검색
select extractvalue(myXMLfield,'/doc/name%') from myTable
XML 샘플의 일종 대
select extractvalue(myXMLfield,'/doc/name1') from myTable
union
select extractvalue(myXMLfield,'/doc/name2') from myTable
union
select extractvalue(myXMLfield,'/doc/name3') from myTable
는 여러 노드 값을 추출하고,는 XPath의 문자열 패턴 (실제 데이터를 적절하게 열 크기를 설정) 노드 이름에 와일드 카드를 위해 :
select x.name
from myTable t
cross join XMLTable(
'/doc/*[substring(name(), 1, 4) = "name"]'
passing myXMLfield
columns name varchar2(20) path '.'
) x;
NAME
--------------------
NAME_1
NAME_2
NAME_3
을 그리고 당신은 당신의 최종 출력 listagg()
을 사용할 수 있습니다 :
select listagg(x.name, ',') within group (order by null) as names
from myTable t
cross join XMLTable(
'/doc/*[substring(name(), 1, 4) = "name"]'
passing myXMLfield
columns name varchar2(20) path '.'
) x;
NAMES
------------------------------
NAME_1,NAME_2,NAME_3
null로 주문하십시오. 이상형입니다. 실제 데이터에 추출 할 수있는 다른 특성이나 값이있는 경우 더 나은 순서로 사용할 수 있습니다. 그렇지 않다면 '이름'다음에 부분을 사용할 수 있습니다. 다른 부분 문자열을 통해 실제로 숫자로 가정합니다.
select listagg(x.name, ',') within group (order by x.id) as names
from myTable t
cross join XMLTable(
'/doc/*[substring(name(), 1, 4) = "name"]'
passing myXMLfield
columns name varchar2(20) path '.',
id number path 'substring(name(.), 5)'
) x;
샘플 XML 및 해당 데이터의 출력이 도움이 될 것입니다. –
XML 및 SQL 출력 예제를 추가했습니다. – Jared