DBMS 2

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

XML 데이터 관리

DBMS 2
DB2 가이드
DB2 사용자 가이드
XML 데이터관리
작성자
admin
작성일
2021-02-19 14:53
조회
1192

XML 데이터 관리

XML 구조 및 데이터베이스

9.1이전 XML 데이터가 데이터베이스에 저장하는 방식입니다

db2

9.1 이후, 하나의 테이블은 관계형 데이터와 계층적 데이터로 나누어서 저장됩니다

db2


XML 테이블 및 인덱스 생성

테이블 생성을 위한 샘플 XML 문장입니다.


customerinfo Cid="1004">
name>Matt Foreman/name>
addr country="Canada">
street>1596 Baseline/street>
city>Toronto/city>
state>Ontario/state>
pcode>M3Z-5H9/pcode>
/addr>
phone type="work">905-555-4789/phone>
phone type="home">416-555-3376/phone>
assistant>
name>Peter Smith/name>
phone type="home">416-555-3426/phone>
/assistant>
/customerinfo>

테이블 생성 문입니다.


CREATE TABLE customer(info XML)

인덱스 생성 문입니다. XML 문의 element, attribute, 그리고 text node에 대해서 인덱 스를 생성할 수 있습니다.


-- Attribute Cid에 인덱스 생성
CREATE UNIQUE INDEX idx1 ON customer(info)
GENERATE KEY USING
xmlpattern '/customerinfo/@Cid'
AS sql DOUBLE
-- Element name에 인덱스 생성
CREATE INDEX idx2 ON customer(info) GENERATE KEY USING
xmlpattern '/customerinfo/name'
AS sql VARCHAR(40)
-- 모든 elements name에 인덱스 생성
CREATE INDEX idx3 ON customer(info)
GENERATE KEY USING
xmlpattern '//name'
AS sql VARCHAR(40);

XML 쿼리문

XML 문의 트리 구조에서 document, element, attribute, text, comment 노드별 구조입니다.

db2

SQL/Xml문과 XQuery는 각각 ISO 및 W3C에서 인증하는 언어로써, 사용법이 다릅니다.
-- SQL : 관계형 데이터에 접근하기 위한 표준 언어입니다.
-- Xquery : XML 쿼리언어로 W3C에서 인증하는 언어입니다.
-- SQL/XML : SQL과 XML를 같이 다루는 ISO에서 인증하는 표준 언어입니다.

SQL/Xml문에서 사용하는 주요 함수입니다.

db2


XML 쿼리문 - XPath

XPath를 사용하기 위해 XML 문서 예제를 살펴보겠습니다.


dept bldg=“101”>
employee id=“901”>
name>John Doe/name>
phone>408 555 1212/phone>
office>344/office>
/employee>
employee id=“902”>
name>Peter Pan/name>
phone>408 555 9918/phone>
office>216/office>
/employee>
/dept>

위의 문서를 구조적으로 표현하면 아래와 같습니다.

db2

XPath를 사용하여 아래와 같이 결과값을 얻을 수 있습니다.

db2


XML 쿼리문 - XPath

XPath에서 “[]”를 사용하면 SQL문에서 where 구문을 사용하는 것처럼 조건문으로 사용할 수 있습니다.

db2

XPath에서 “.” 은 현재 위치를, “..”는 상위 정보를 알려주는 데 사용합니다.

db2


XML 쿼리문 - Xquery

FLOWR 표현식은 아래와 같습니다.

db2

Xquery 사용 예제입니다.

조회문)


xquery
for $d in db2-fn:xmlcolumn('dept.deptdoc')/dept
let $emp := $d//employee/name
where $d/@bldg > 95
order by $d/@bldg
return
EmpList>
{$d/@bldg, $emp}
/EmpList>

조회결과)


EmpList bldg="101">
name>
John Doe
/name>
name>
Peter Pan
/name>
/EmpList>

XML 쿼리문 ? SQL/XML

Xmlexists 사용 예입니다.


-- xmlexists 사용 예제
SELECT name FROM clients
WHERE xmlexists(
'$c/Client/Address[zip="95116"]'
passing clients.contact as "c"
)

Xmlquery 사용 예입니다.


SELECT xmlquery('$c/Client/email' passing contact as "c")
FROM clients
WHERE status = 'Gold‘

Xmltable 사용 예입니다.


SELECT t.comment#, i.itemname, t.customerID, Message
FROM items i,
xmltable('$c/Comments/Comment' passing i.comments as "c"
columns Comment# integer path 'CommentID',
CustomerID integer path 'CustomerID',
Message varchar(100) path 'Message') AS t

Clients 테이블의 contract xml 컬럼의 데이터 조회


xquery db2-fn:xmlcolumn(‘CLIENTS.CONTACT’))
?위 문장의 경우 “SELECT contact FROM clients” 와 동일합니다.

클라이언트 팩스 데이터 조회


xquery
for $y in db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)/Client/fax
return $y

두 테이블(dept, unit)에 대해서 조인문 쿼리


SELECT u.unitID
FROM dept d, unit u
WHERE XMLEXISTS (
‘$e//employee[name = $m]’
passing d.deptdoc as “e”, u.manager as “m”)