บล็อกนี้สำรวจวิธีการสองสามวิธีในการจัดการข้อมูล XML ใน Oracle® PL/SQL เรียนรู้เพิ่มเติมเกี่ยวกับบริการฐานข้อมูลของเรา
หากคุณต้องการแปลงข้อมูล XML จากไฟล์ XML เป็นแถวและคอลัมน์ของ Oracle PL/SQL มีตัวเลือกดังต่อไปนี้:
- โหลดไฟล์ XML ลงในตาราง XML แล้วแยกวิเคราะห์
- แยกวิเคราะห์ไฟล์ XML โดยตรงโดยไม่ต้องโหลดลงในตาราง XML
ในการโหลดข้อมูล XML ลงในตาราง Oracle ให้ใช้ตัวเลือก เช่น SQLLOADER
,utl_file
, หรือ XML CLOB
. หลังจากที่คุณโหลดข้อมูลลงในตารางแล้ว คุณต้องแยกค่าออกจากแท็ก XML แต่ละรายการ ในการดึงข้อมูล XML ให้ใช้ฟังก์ชันในตัวของ Oracle เช่น XMLELEMENT
, XMLAGG
, XMLTABLE
,XMLSEQUENCE
และ EXTRACTVALUE
.
ฟังก์ชันในตัวหลักที่ใช้คือ EXTRACT
ซึ่งแสดงในภาพต่อไปนี้:
ที่มาของภาพ :https://docs.oracle.com/cd/B19306_01/server.102/b14200/img/extract_xml.gif
ไฟล์ตัวอย่าง
หากต้องการสำรวจตัวเลือกเหล่านี้โดยละเอียด ตัวอย่างในโพสต์นี้ใช้ไฟล์ Test.xml . ในการเข้าถึงไฟล์ในฐานข้อมูล ให้ใช้ DBA ไดเร็กทอรีซึ่งกำหนดไว้ใน Oracle ตัวอย่างใช้ XX_UTL_DIR เป็นไดเรกทอรีอ้างอิง คุณสามารถใช้ไดเร็กทอรีที่คุณเลือกแทนได้
Test.xml มีเนื้อหาดังต่อไปนี้:
<?xml version = '1.0' encoding = 'UTF-8'?>
<UANotification xmlns="https://www.test.com/UANotification">
<NotificationHeader>
<Property name="ErrorMessage" value="User Data Invalid"/>
<Property name="SPSDocumentKey" value="11111111111"/>
<Property name="AppKey" value="22222222"/>
<Property name="FileName" value="SH201701181418.61W"/>
<Property name="SenderName" value="Test"/>
<Property name="ReceiverName" value="Integrated Supply Network"/>
<Property name="DocumentType" value="856"/>
<Property name="SourceDataType" value="XML"/>
<Property name="DestinationDataType" value="FEDS"/>
<Property name="XtencilNet" value="shFedsWrite"/>
<Property name="PreviousMaps" value="shFedsWrite]"/>
</NotificationHeader>
<FINotification xmlns="https://www.test.com/fileIntegration">
<ServiceResult>
<DataError>
<Message>Invalid data test 1</Message>
</DataError>
<DataError>
<Message>Invalid data test 2</Message>
</DataError>
</ServiceResult>
</FINotification>
</UANotification>
วิธีแรก:โหลดไฟล์ XML ลงในตาราง XML แล้วแยกวิเคราะห์
ขั้นแรก สร้างตารางใน Oracle ที่มีคอลัมน์ที่มีประเภทข้อมูล XMLTYPE .
ตัวอย่างเช่น ใช้รหัสต่อไปนี้เพื่อสร้างตาราง:
CREATE TABLE xml_tab (
File_name varchar2(100),
xml_data XMLTYPE
);
ถัดไป แทรกข้อมูลจาก Test.xml ลงใน xml.tab โดยใช้คำสั่งต่อไปนี้:.
INSERT INTO xml_tab
VALUES ( ‘Test.xml’,
XMLTYPE (BFILENAME ('XX_UTL_DIR', ‘Test.xml’),
NLS_CHARSET_ID ('AL32UTF8')
));
คำสั่ง INSERT ก่อนหน้าจะแทรกข้อมูลของไฟล์ Test.xml ลงในช่อง xml_data
ของตาราง xml_tab . หลังจาก INSERT เสร็จสิ้น XMLdata จะพร้อมใช้งานในตาราง xml_tab . หากต้องการอ่านข้อมูลในแบบสอบถาม SELECT ให้ใช้คำสั่ง SELECT ที่อธิบายไว้ถัดไป
วิธีอ่านข้อความแท็ก Message
ที่อยู่ภายใต้แท็กหลักDataError
, ใช้คำสั่ง SQL ต่อไปนี้:
SELECT EXTRACT (VALUE (a1),
'/DataError/Message/text()',
'xmlns="https://www.test.com/fileIntegration')
msg
FROM xml_tab,
TABLE (
XMLSEQUENCE (
EXTRACT (
xml_data,
'/UANotification/ns2:FINotification/ns2:ServiceResult/ns2:DataError',
'xmlns="https://www.test.com/UANotification" xmlns:ns2="https://www.test.com/fileIntegration"'))) a1
WHERE file_name = 'Test.xml';
วิธีอ่าน property name
และค่าของมัน ให้ใช้คำสั่ง SQL ต่อไปนี้:
SELECT EXTRACTVALUE (VALUE (a1),
'/Property/@name',
'xmlns="https://www.test.com/UANotification')
attribute,
EXTRACTVALUE (VALUE (a1),
'/Property/@value',
'xmlns="https://www.test.com/UANotification')
VALUE
FROM xml_tab,
TABLE (
XMLSEQUENCE (
EXTRACT (
xml_data,
'/UANotification/NotificationHeader/Property',
'xmlns="https://www.test.com/UANotification" xmlns:ns2="https://www.test.com/fileIntegration"'))) a1
WHERE file_name = 'Test.xml';
วิธีที่สอง:แยกวิเคราะห์ไฟล์ XML โดยตรงโดยไม่ต้องโหลดลงในตาราง XML
หากคุณต้องการแยกวิเคราะห์ Test.xml . โดยตรง โดยไม่ต้องโหลดลงใน Oracletable คุณอาจใช้คำสั่ง SELECT ต่อไปนี้:
SELECT EXTRACTvalue (VALUE (a1),
'/Property/@name',
'xmlns="https://www.test.com/UANotification') attribute,
EXTRACTvalue (VALUE (a1),
'/Property/@value',
'xmlns="https://www.test.com/UANotification') value
FROM
TABLE (
XMLSEQUENCE (
EXTRACT (
xmltype(BFILENAME ('XX_UTL_DIR', 'Test.xml'),NLS_CHARSET_ID ('AL32UTF8')),
'/UANotification/NotificationHeader/Property',
'xmlns="https://www.test.com/UANotification" xmlns:ns2="https://www.test.com/fileIntegration"'))) a1
สรุป
ทั้งสองวิธีในการแยกวิเคราะห์ข้อมูล XML ที่อธิบายไว้ในโพสต์นี้ให้ผลลัพธ์สุดท้ายที่เหมือนกัน วิธีแรกคือกระบวนการสามขั้นตอน ซึ่งต้องใช้โค้ดต่อไปนี้:
- สร้างตาราง Oracle
- แทรกข้อมูลของไฟล์ XML ลงในตารางที่สร้างขึ้น
- เขียนคำสั่ง SELECT เพื่อดึงค่าจากตาราง
ตัวเลือกที่สองเป็นกระบวนการขั้นตอนเดียวที่คุณเขียนคำสั่ง SELECT และรับผลลัพธ์ที่ต้องการ
บทสรุป
ทั้งสองตัวเลือกใช้งานได้ แต่ถ้าคุณต้องการจัดเก็บไฟล์ XML ในการอ้างอิง Oracle forfuture คุณควรใช้แนวทางแรกเนื่องจากข้อมูลยังคงอยู่ในตารางสำหรับการอ้างอิงในอนาคต และคุณสามารถเข้าถึงได้ทุกเมื่อ
โดยการเลือกวิธีที่สอง คุณสามารถแยกวิเคราะห์ข้อมูลได้โดยตรง อย่างไรก็ตาม ด้วยตัวเลือกนี้ ข้อมูลไฟล์ XML ดั้งเดิมไม่สามารถเข้าถึงได้ในอนาคต เนื่องจากตัวเลือกนี้จะไม่เก็บเนื้อหาของไฟล์ XML ใน Oracle
ใช้แท็บคำติชมเพื่อแสดงความคิดเห็นหรือถามคำถาม
เพิ่มประสิทธิภาพสภาพแวดล้อมของคุณด้วยการดูแลระบบ การจัดการ และการกำหนดค่าจากผู้เชี่ยวชาญ
บริการแอปพลิเคชันของ Rackspace(RAS) ผู้เชี่ยวชาญจะให้บริการแบบมืออาชีพและที่มีการจัดการในแอปพลิเคชันที่หลากหลาย:
- แพลตฟอร์มอีคอมเมิร์ซและประสบการณ์ดิจิทัล
- การวางแผนทรัพยากรองค์กร (ERP)
- ระบบธุรกิจอัจฉริยะ
- การจัดการลูกค้าสัมพันธ์ของ Salesforce (CRM)
- ฐานข้อมูล
- อีเมลโฮสติ้งและประสิทธิภาพการทำงาน
เราจัดส่ง:
- ความเชี่ยวชาญที่เป็นกลาง :เราลดความซับซ้อนและเป็นแนวทางในการสร้างสรรค์สิ่งใหม่ของคุณ โดยมุ่งเน้นที่ความสามารถที่มอบคุณค่าในทันที
- ประสบการณ์ที่คลั่งไคล้™ :เรารวมกระบวนการก่อน เทคโนโลยีที่สอง®แนวทางพร้อมการสนับสนุนทางเทคนิคเฉพาะเพื่อมอบโซลูชันที่ครอบคลุม
- ผลงานที่ยอดเยี่ยม :เราใช้ประสบการณ์ระบบคลาวด์ที่ครอบคลุมเพื่อช่วยคุณเลือกและปรับใช้เทคโนโลยีที่เหมาะสมบนระบบคลาวด์ที่เหมาะสม
- ส่งไว :เราพบคุณในที่ที่คุณอยู่ในการเดินทางของคุณและปรับความสำเร็จของเราไปพร้อมกับคุณ
แชทเลยเพื่อเริ่มต้น