MySQL không hỗ trợ các kiểu dữ liệu XML như Microsoft SQL Server hoặc PostgreSQL.
Nhiều khi cần phải lưu trữ nhiều nút dữ liệu vào một cột duy nhất, ở dạng XML.
Trong MySQL, Bạn phải lưu trữ XML trong kiểu dữ liệu CLOB (Character Large Object).
MySQL cung cấp các loại hàm XML khác nhau, do đó, bằng cách sử dụng các hàm đó, chúng ta có thể phân tích cú pháp dữ liệu XML rất dễ dàng.
Dưới đây là minh họa đầy đủ về lưu trữ và truy xuất dữ liệu XML:
Đầu tiên lưu trữ dữ liệu XML giống như bất kỳ chuỗi nào khác:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | CREATE DATABASE `Employee`; CREATE TABLE Employee.XMLTest ( XMLDATA TEXT ); INSERT INTO Employee.XMLTest VALUES ( ' ' ); |
Thứ hai, phân tích cú pháp dữ liệu này bằng quy trình được lưu trữ bên dưới:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | DELIMITER $$ CREATE PROCEDURE Employee.usp_ParseXMLData() BEGIN DECLARE i INT DEFAULT 1; DECLARE XMLText TEXT; DECLARE RNumber VARCHAR(50) ; DECLARE RName VARCHAR(50); SET XMLText = (SELECT XMLDATA FROM Employee.XMLTest); CREATE TEMPORARY TABLE Employee.TempXMLData ( RollNumber VARCHAR(50) ,Name VARCHAR(50) ); SET RNumber = ExtractValue(XMLText, '//RollNumber[$i]'); WHILE RNumber != "" DO SET RNumber = ExtractValue(XMLText, '//RollNumber[$i]'); SET RName = ExtractValue(XMLText, '//Name[$i]'); INSERT INTO Employee.TempXMLData SELECT RNumber, RName; SET i = i+1; END WHILE; SELECT RollNumber ,Name FROM Employee.TempXMLData WHERE RollNumber <>''; DROP TABLE Employee.TempXMLData; END$$ DELIMITER ; |
Gọi thủ tục được lưu trữ này và kiểm tra kết quả:
1 | CALL Employee.usp_ParseXMLData(); |