xmlcolumn-contains 함수
db2-fn:xmlcolumn-contains (텍스트 검색) 함수는 Db2® 의해 수행된 텍스트 검색을 기반으로 XML 데이터 컬럼에서 일련의 XML 문서를 반환합니다.
구문
- 1 You can specify each option only once.
- string-literal
- db2-fn:xmlcolumn-contains에서 검색할 XML 데이터 유형 컬럼의 이름을 지정합니다. string-literal 값에서는 대소문자가 구분되며 테이블 및
컬럼 이름의 대소문자와 일치해야 합니다. 테이블 이름 또는 뷰 이름을 사용하여
컬럼 이름을 규정해야 합니다. SQL 스키마 이름은
선택사항입니다. SQL 스키마 이름을 지정하지 않으면 CURRENT SCHEMA의 값이 사용됩니다.
컬럼에는 텍스트 검색 인덱스가 있어야 합니다.
search-argument - 원자 문자열 값 또는 비어 있는 시퀀스를 리턴하는 표현식입니다. 문자열은 모두 공백 문자이거나 빈 문자열일 수 없습니다. 문자열은 최대 길이가 4096바이트인 XMLCAST의 규칙에 따라 VARCHAR 유형으로 캐스트할 수 있어야 합니다. 옵션 문자열 리터럴
함수에 적용되는 검색 인수 옵션을 지정합니다.
search-argument-options의 일부로 지정할 수 있는 옵션은 다음과 같습니다.
- QUERYLANGUAGE = 로케일
- Db2 Db2 대한 텍스트 검색을 수행할 때 사용하는 로케일을 지정합니다. 값은 지원되는 로케일이 될 수 있습니다. QUERYLANGUAGE을(를) 지정하지 않은 경우, 기본값은 텍스트 검색 인덱스의 로케일입니다. 텍스트 검색 인덱스의 LANGUAGE 매개변수가 AUTO인 경우, QUERYLANGUAGE의 기본값은 en_US입니다. RESULTLIMIT = 값
최적화 프로그램이 SCORE를 얻기 위해 결과 세트의 각 행에 대해 검색 엔진을 호출하는 플랜을 선택하는 경우, RESULTLIMIT 옵션은 성능에 영향을 주지 않습니다. 그러나 전체 결과 세트에 대해 검색 엔진이 한 번 호출되면 RESULTLIMIT은(는) FETCH FIRST절과 같이 작동합니다.
동일한 쿼리에서 RESULTLIMIT을(를) 지정하는 여러 텍스트 검색을 사용하는 경우, 동일한 search-argument를 사용하십시오. 다른 search-argument 값을 사용하는 경우 예상한 결과를 수신하지 못할 수도 있습니다.
파티션된 텍스트 인덱스의 경우 결과 제한은 각 파티션에 개별적으로 적용됩니다.
여러 개의 텍스트 검색을 사용할 때 발생할 수 있는 문제의 예와 해결책은 예제의 마지막 예제를 참조하십시오. 동의어 = 끄기 | 켜기- 텍스트 검색 인덱스와 연관된 동의어 사전을 사용할지 여부를
지정합니다. 기본값은 꺼짐입니다. 동의어를 사용하려면
동의어 도구를 사용하여 텍스트 검색 인덱스에 동의어 사전을 추가하십시오.
- 해제
- 동의어 사전을 사용하지 않습니다. 위치
- 텍스트 검색 인덱스와 연관된 동의어 사전을 사용합니다.
리턴 값
리턴 값은 string-literal에서 지정하는 컬럼의 널(NULL)이 아닌 XML 값이 병합된 시퀀스입니다. 널이 아닌 XML값은 비결정적인 순서로 리턴됩니다. XML 값은 string-literal에서 지정한 컬럼에 대해 search-argument를 사용하는 SQL CONTAINS 함수가 1을 리턴하는 XML 문서입니다. 이러한 XML 값이 없으면 빈 시퀀스가 리턴됩니다.
search-argument가 빈 시퀀스이면 빈 시퀀스가 리턴됩니다. search-argument가 빈 문자열이거나 모두가 공백 문자인 문자열인 경우 오류가 리턴됩니다. 세 번째 인수가 널이면 결과는 세 번째 인수를 지정하지 않은 경우와 동일합니다.
string-literal을 사용하여 지정하는 컬럼에 텍스트 검색 인덱스가 없으면 오류가 리턴됩니다.
db2-fn:xmlcolumn-contains 함수는 db2-fn:sqlquery 함수와 관련되어 있고 두 함수 모두 동일한 결과를 생성할 수 있습니다. 하지만 두 함수의 인수는 대소문자 구분에서 다릅니다. db2-fn:xmlcolumn-contains 함수의 첫 번째 인수인 string-literal은 XQuery에 의해 처리되며 대소문자를 구분합니다. Db2 테이블 이름과 열 이름은 기본적으로 대문자로 되어 있기 때문에, db2-fn:xmlcolumn-contains 의 첫 번째 인자는 대문자로 되어 있는 경우가 많습니다. db2-fn:sqlquery 함수의 첫 번째 인수는 SQL에 의해 처리되며, 이는 식별자를 자동으로 대문자로 변환합니다.
다음 함수 호출들은 동일하며 PRODUCT 테이블이 현재 CURRENT SCHEMA에 지정된 스키마에 있는 것으로 가정하면 동일한 결과를 리턴합니다.
db2-fn:xmlcolumn-contains("PRODUCT.DESCRIPTION", "snow shovel")
db2-fn:sqlquery("select description from product
where contains(description, 'snow shovel')) = 1")예:
다음 예제에서는 Db2 사용하여 검색을 수행합니다. 검색 중인 컬럼은 XML 컬럼이고 텍스트 검색 인덱스가 있습니다.
첫 번째 함수는 snow 및 shovel 단어가 포함된 PRODUCT.DESCRIPTION 컬럼에 저장된 XML 문서를 검색합니다. 함수는 리턴되는 최대 문서 수를 2로 설정합니다. 텍스트 검색이 많은 수의 문서를 리턴하는 경우, 리턴되는 최대 문서 수를 제한하는 RESULTLIMIT 옵션을 사용하여 검색을 최적화할 수 있습니다.
db2-fn:xmlcolumn-contains('PRODUCT.DESCRIPTION', 'snow shovel', 'RESULTLIMIT=2')함수는 검색 기준에 맞는 XML 문서를 리턴합니다. 문서에는 단순한 제품 설명 그 이상이 포함될 수 있습니다. 예를 들어 다음 XML 부분은 XML 컬럼의 두 제품 설명으로 구성됩니다. 각 문서에는 제품 설명과, 제품 이름, 가격, 무게 및 제품 ID와 같은 정보가 들어 있습니다.
<product xmlns="http://posample.org" pid="100-100-01">
<description>
<name>Snow Shovel, Basic 22 inch</name>
<details>Basic Snow Shovel, 22 inches wide, straight handle with
D-Grip</details>
<price>9.99</price>
<weight>1 kg</weight>
</description>
</product>
<product xmlns="http://posample.org" pid="100-101-01">
<description>
<name>Snow Shovel, Deluxe 24 inch</name>
<details>A Deluxe Snow Shovel, 24 inches wide, ergonomic curved handle
with D-Grip</details>
<price>19.99</price>
<weight>2 kg</weight>
</description>
</product>combustible
fósil 함수는 XML 컬럼 STUDENT_ESSAYS.ABSTRACTS에서 스페인어인 fossil fuel 문구를 포함하는 10개의 학생 에세이를 검색합니다. 함수는 텍스트 검색에 사용할 언어로 es_ES(스페인어)를 지정하고
연관된 텍스트 검색 인덱스에 대해 작성한 동의어 사전을 사용합니다. 이 함수는 결과 수를 제한하기 위해 RESULTLIMIT을(를) 사용하여 검색을 최적화합니다.
db2-fn:xmlcolumn-contains('STUDENT_ESSAYS.ABSTRACTS', '"combustible fosil"',
'QUERYLANGUAGE=es_ES RESULTLIMIT=10 SYNONYM=ON')다음 예제에서는
db2-fn:xmlcolumn-contains를 사용하여 ergonomic 단어를 포함하는
PRODUCT.DESCRIPTION 컬럼에 저장되는 XML 문서를 찾습니다. 표현식은 가격이 20미만인 제품의 이름을 리턴합니다.
xquery
declare default element namespace "http://posample.org";
db2-fn:xmlcolumn-contains(
'PRODUCT.DESCRIPTION', 'ergonomic')/product/description[price < 20]/name이전
표현식은 리턴된 XML 문서의 이름 요소만 리턴합니다. 예를 들어 ergonomic 용어가 제품 Snow Shovel, Deluxe 24 inch의 제품 설명에 있는 경우, 표현식은 다음과 유사한 이름 요소를 리턴합니다.
<name xmlns="http://posample.org" >Snow Shovel, Deluxe 24 inch<name>다음
표현식은 db2-fn:xmlcolumn-contains를 사용하여 ice 및 scraper 단어를 포함하는
PRODUCT.DESCRIPTION 컬럼에서 XML 문서를 찾습니다. 표현식에서는 제품 설명의 제품 ID를 사용하여
제품 ID를 포함하는 PURCHASEORDER 테이블에서 구매 주문을 찾습니다. 표현식은 일치하는 XML 설명 문서의 제품 ID가
포함되는 구매 주문에서 고객 ID를 리턴합니다.
xquery
declare default element namespace "http://posample.org";
for $po in db2-fn:sqlquery('
select XMLElement(Name "po", XMLElement(Name "custid", purchaseorder.custid),
XMLElement(Name "porder", purchaseorder.porder))
from purchaseorder')
let $product := db2-fn:xmlcolumn-contains('PRODUCT.DESCRIPTION',
'ice scraper')/product
where $product/@pid = $po/porder/PurchaseOrder/item/partid
order by $po/custid
return $po/custid표현식은 고객 ID를 포함하는 custid 요소를 리턴합니다. 요소는 오름차순으로 되어 있습니다. 예를 들어 세 개의 구문 주문이 일치하고 구매 주문에 고객 ID 1001, 1002 및 1003이 있는 경우 표현식은 다음 요소를 리턴합니다.
<custid xmlns="http://posample.org">1001</custid>
<custid xmlns="http://posample.org">1002</custid>
<custid xmlns="http://posample.org">1003</custid>
동일한 쿼리에 여러 개의 텍스트 검색이 있는 경우, Db2 여러 개의 텍스트 검색 결과를 결합하여 반환합니다. 예를 들어, 다음의 xquery 문장은 직원 이력서에서 " ruby on
rails "와 " ajax web "라는 문구를 정확히 포함하는 이력서를 검색합니다.
XQUERY
db2-fn:xmlcolumn-contains('EMP_RESUME.XML_FORMAT',
'"ruby on rails" AND "ajax web"')
xquery for $i in db2-fn:xmlcolumn-contains('DBCP1208.T_AUTO.T_XML',
'@xpath:''//en//en[. contains("purpose") and @a1 = "value for en\:attribute1"
and @slope = "9"] '' ') return $i/*/fn:string 