2009-03-30 6 views
3

© Oracle Database의 레코드에 대해 저장할 XML 문서가 있습니다.SQL의 XML 컬럼 검색

테이블 CourseXML이 포함됩니다

Record_Number int 
XML_Type  int 
XMLDoc   clob 
...etc 

내가 XML 태그에 의해 해당 xmldoc 열에서 검색을하고 싶습니다.

<root> 
    <UnitID="2" Name="Jerry" SName="Potter"/> 
    <UnitID="3" Name="Jim" SName="Carelyn"/> 
</root> 

내가 UnitID = "2"에서 검색을 만들고 싶어하고 난 단지 제리의 XML 행을 원하는 : XML 문서는 다음과 같이 XML 스키마가 있습니다. 그 xml 행을 얻으려면 어떻게 select 문을 쿼리해야합니까?

+1

당신은 당신이 당신의 DB 서버로 오라클을 사용하고 있는지 언급 귀하의 게시물을 편집 할 수 있습니다 - 수도 도움이됩니다. –

답변

0
SELECT * FROM CourseXML 
WHERE XMLDoc = 'UnitID="2"' 

아니야? 또는 나는 오해가 무엇입니까?

+0

"XML"형식의 열 –

2

정확하려면 노드 비트를 사용해야 할 수도 있습니다.

SELECT 
    y.item.value('@UnitID', 'int') AS UnitID, 
    y.item.value('@Name', 'varchar(100)') AS [Name], 
    y.item.value('@SName', 'varchar(100)') AS [SName] 
FROM 
    <table> 
    CROSS APPLY 
    XMLDoc.nodes('/root') AS y(item) 
WHERE 
    y.item.value('@UnitID', 'int') = 2 

편집 : 테이블을 사용하는 수정 된 코드는, 당신은 그것을 얻기의 많은 방법을 지역 변수

+0

인 경우 작동하지 않습니다. 죄송 합니다만 'CROSS APPLY' 문은 T-SQL 세계에 속해 있습니다 ... – ThinkJet

+0

@ThinkJet :이 대답 후에 태그가 업데이트되었습니다. http://stackoverflow.com/posts/697256/revisions 당시의 정보에 대한 답변은 – gbn

+1

입니다. 불편을 끼쳐 드려 죄송합니다. 방금 페이지 상단에 질문에 대한 코멘트가 누락되었습니다. – ThinkJet

2

xml로하지. "gbn"은 한 가지 방법을 보여주었습니다. 두 가지가 있습니다. 당신이 (당신이 태그에 이런 일을 놓을 게요 가정) 전체 "행"을 원하는 경우

,이 시도 :

select 
    xmldoc.query('//node[@UnitID="2"]') 
from 
    xmltest 

당신이 태그 사용에서 그냥 "이름"속성을 원하는 경우 이 : 당신은 속성 및/또는 하위 요소의 모두에 액세스해야하는 경우

select 
    xmldoc.value('(//node[@UnitID="2"]/@Name)[1]', 'varchar(20)') 
from 
    xmltest 

의와 사용 GBN의 접근 방식 "CROSS는 (...) xmldoc.nodes을 적용".

즐기십시오! SQL Server 2005의 XML 지원은 실제로 매우 광범위하고 유용합니다! 마크

0

구조이기 때문에, 및 전체 텍스트 검색을 사용하여.

<Root> 
    <Tags> 
    <TagName>Actividad</TagName> 
    <Valor>Actividad 2</Valor> 
    </Tags> 
    <Tags> 
    <TagName>Cliente</TagName> 
    <Valor>Alpina</Valor> 
    </Tags> 
</Root> 
select 
    Filename 
from 
Files 
where 
CONTAINS(Tags,'Actividad') and 
CONTAINS(Tags,'Cliente') and 
Tags.exist('//Tags/Valor/text()[contains(., "Actividad 1")]') = 1 and 
Tags.exist('//Tags/Valor/text()[contains(., "ADV")]') = 1 

전체 텍스트 검색이 (상관없이 SQL 2008 R2 문서의 말) 속성에 수행 될 수 없기 때문에 나는 XML에 속성을 사용하지 않는 것이 좋습니다.

Please Refer to this