Tải bản đầy đủ (.doc) (4 trang)

Bài thực hành XML trong Oracle

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (54.09 KB, 4 trang )

Khoa Hệ thống thông tin – Đại học Công nghệ thông tin

Bài thực hành XML trong Oracle
Các cách tiếp cận lưu trữ XML trong Oracle database:
- Tiếp cận 1: Sử dụng datatype là XMLType. Trong cách này có
2 phương án: a) lưu trữ nội dung file XML (tài liệu XML) trực
tiếp trong một cột (column) có kiểu XMLType của một table
được chỉ định, hoặc b)Sử dụng bảng XMLType (XMLType
Table) để lưu trữ file XML.
- Tiếp cận 2: lưu trữ nội dung file XML sử dụng cột CLOB
hoặc VARCHAR
THỰC HÀNH CÁCH TIẾP CẬN 1a)
1. Tạo bảng có tên là TEST có 1 cột(column) với kiểu là XMLTYPE
Trong Oracle tạo 1 table có tên là TEST như sau:
CREATE TABLE TEST (
ID NUMBER,
XMLCOLUMN XMLTYPE
)
Sau đó tạo 1 file xml có nội dung như sau:
<?xml version="1.0"?>
<qlnv>
<nhanvien id="1">
<diachi>
<sonha>1058</sonha>
<sodienthoai nha= “113” coquan= “114” >9111111</sodienthoai>
11</phuong>
<thanhpho>hcm</thanhpho>
</diachi>
</nhanvien>
<nhanvien id="2">
<diachi>


<sonha>304</sonha>
1</phuong>
<thanhpho>vungtau</thanhpho>
</diachi>
</nhanvien>
</qlnv>

1


Khoa Hệ thống thông tin – Đại học Công nghệ thơng tin
Tiếp theo, copy tồn bộ nội dung file XML trên và insert dữ liệu vào bảng TEST (nội
dung file XML trên sẽ điền đầy vào giá trị cột thứ 2 của table TEST – cột
XMLCOLUMN) bằng công cụ Sqlplus:
insert into TEST values(1, '<?xml version="1.0"?>
<qlnv>
<nhanvien id="1">
<diachi>
<sonha>1058</sonha>
<sodienthoai nha= “113” coquan= “114” >9111111</sodienthoai>
11</phuong>
<thanhpho>hcm</thanhpho>
</diachi>
</nhanvien>
<nhanvien id="2">
<diachi>
<sonha>304</sonha>
1</phuong>
<thanhpho>vungtau</thanhpho>
</diachi>

</nhanvien>
</qlnv>')

Thực hiện câu truy vấn theo cú pháp XPATH: (đường dẫn trong XML, tương tự truy vấn
dạng cây, đi theo nhánh từ gốc (ROOT) đi xuống các nút (NODE) và dừng ở nút cần tìm
(đi từ ROOT của XML).
1.1 Dùng hàm Extract trả về giá trị của 1 node dạng văn bản xml (trích lược 1 phần
file XML)
Ví dụ: trích một phần file XML chứa thơng tin về địa chỉ của nhân viên có mã số = “1”:
đi từ gốc, ta có:
select extract(xmlcolumn,'qlnv/nhanvien[1]/diachi') from test
LƯU Ý: VỚI NHỮNG THẺ GIỐNG NHAU TRONG TÀI LIỆU XML, HÀM
EXTRACT SẼ PHẢI XÁC ĐỊNH THẺ DUY NHẤT MÀ NĨ CẦN RẺ NHÁNH ĐÊN.
Ví dụ: ta có 2 thẻ <nhanvien id=“1”> và <nhanvien id=“2”>, ta cần phải xác định thẻ nào
sẽ được lấy (Extract) thơng qua id của nó.
1.2 Tương tự cho các hàm khác: hàm Extractvalue() (lấy giá trị của 1 nút cụ thể,
hàm chỉ trả về 1 giá trị) ; hàm ExistsNode() kiểm tra 1 nút có tồn tại hay khơng
(ExtractValue() can only return a the value of a single node or attribute value)
Ví dụ:

select extractvalue(xmlcolumn,'qlnv/nhanvien[1]/diachi/sonha') from TEST
select existsnode(xmlcolumn,'qlnv/nhanvien[1]/diachi') from TEST
2


Khoa Hệ thống thông tin – Đại học Công nghệ thông tin

select
extractvalue(xmlcolumn,'/qlnv/nhanvien[1]/diachi/sodienthoai/@coquan')
from TEST

THỰC HÀNH CÁCH TIẾP CẬN 1b)
2. Tạo bảng có tên là TEST_2 có kiểu là XMLTYPE
Trong Oracle tạo 1 table có tên là TEST_2 như sau:
CREATE TABLE TEST_2 of XMLType;
Tạo một thư mục chứa tất cả file XML mà ta cần đọc nội dung. Ví dụ: tạo thư mục
DirXML ở ổ đĩa D:\ và chép các file XML vào thư mục DirXML (ví dụ chép 2 file:
qlnv.xml (chứa userID từ 1 đến 3), qlnv1.xml (chứa userID từ 4 đến 6)).
Tiếp theo, connect user sys để tạo một tên thư mục trên Oracle ánh xạ đến thư mục vật lý
chứa các file XML, đặt thư mục ánh xạ này tên là “DirXMLOra”, lưu ý: khi sử dụng tên
thư mục ánh xạ bắt buộc sử dụng chữ viết hoa. Đồng thời gán quyền read trên thư mục
cho user nào cần truy xuất (có thể gán public).
create directory DirXMLOra as 'D:\DirXML'
grant read on directory DirXMLOra to public with grant option
Sau đó, connect lại user sở hữu table TEST_2 và chạy function sau để lấy dữ liệu từ file
XML vào table TEST_2:
create or replace function getDocument (filename varchar2) return clob
authid current_user is
xbfile bfile;
xclob clob;
begin
xbfile := bfilename('DIRXMLORA',filename);
dbms_lob.open(xbfile);
dbms_lob.createtemporary(xclob,TRUE,dbms_lob.session);
dbms_lob.loadfromfile(xclob,xbfile, dbms_lob.getlength(xbfile));
dbms_lob.close(xbfile);
return xclob;
end;
INSERT INTO TEST_2 VALUES(XMLTYPE(getDocument('qlnv.xml')));
INSERT INTO TEST_2 VALUES(XMLTYPE(getDocument('qlnv1.xml')));
3



Khoa Hệ thống thông tin – Đại học Công nghệ thông tin
Truy xuất dữ liệu từ table trên, tương tự cách 1a): Lưu ý: sử dụng alias cho table, ví
dụ TEST_2 x
SELECT * FROM TEST_2;
SELECT EXISTSNODE (value(x),'/qlnv/nhanvien[2]/diachi') from TEST_2 x
SELECT EXTRACT (value(x),'qlnv/nhanvien[2]/diachi/sonha') from TEST_2 x
SELECT EXTRACTVALUE (value(x),'qlnv/nhanvien[1]/diachi/sonha') from TEST_2 x
SELECT EXTRACTVALUE (value(x),'qlnv/nhanvien[1]/diachi/sodienthoai/@nha') from
TEST_2 x
SELECT count(*) FROM TEST_2 x
WHERE extractvalue(value(x),'/qlnv/nhanvien[3]/diachi/thanhpho') = 'vungtau';
SELECT existsNode(value(x),'/qlnv/nhanvien[@id = "1"]/diachi') FROM TEST_2 x
SELECT existsNode(value(x),'/qlnv/nhanvien[@id = "6"]/diachi') FROM TEST_2 x
SELECT existsNode(value(x),'/qlnv/nhanvien[@id = "8"]/diachi') FROM TEST_2 x

4



×