มีงานที่ต้องนำข้อมูลที่อยู่ในรูปแบบ XML ลงไปบันทึกในฐานข้อมูล ของ Oracle ข้อมูลที่จะทำการบันทึก็เป็นแค่ XML ที่อยู่ในรูปแบบของ String ธรรมดาแต่ต้องการเอาไปเก็บเป็นชนิดข้อมูล (Data Type) ที่เป็น XML ของ Oracle จากการหาข้อมูลดูก็ได้ตัวอย่าง Code จาก เว็บ Oracle เลยทดลองเขียนเป็น PL/SQL ดังนี้
สร้างตาราง
CREATE TABLE XML_TEM(
XML_ID VARCHAR2(30 BYTE) NOT NULL,
XML_DESC VARCHAR2(50 BYTE),
XML_DATA SYS.XMLTYPE
);
สร้าง Procedure
CREATE OR REPLACE PROCEDURE INSERT_XML IS
V_XML VARCHAR(4000);
V_ERR_CODE VARCHAR(100);
V_ERR_DESC VARCHAR(1000);
BEGIN
V_XML := V_XML||'<?xml version="1.0" encoding="UTF-8"?>';
V_XML := V_XML||'<PROCESS>';
V_XML := V_XML||'<STATUS>OK</STATUS>';
V_XML := V_XML||'<DESC>Process transaction success.</DESC>';
V_XML := V_XML||'</PROCESS>';
INSERT INTO XML_TEM (XML_ID, XML_DESC, XML_DATA)
VALUES ('101','Command state',XMLTYPE(V_XML));
EXCEPTION
WHEN OTHERS THEN
V_ERR_CODE := SQLCODE;
V_ERR_DESC := SQLERRM;
END INSERT_XML;
/
ซึ่งไม่มีปัญหาอะไร และ ทดสอบโดยใช้วิธีเดียวกันนี้กับ Code Java ก็ใช้งานได้ดี ดังนี้
private static void insertXML() throws SQLException{
Connection conn = null;
PreparedStatement pStmt = null;
StringBuffer sql = new StringBuffer();
String xmlData = "<data><no>100</no><name>Name is</name></data>";
try{
conn = getConnection();
sql.append("INSERT INTO XML_TEM (XML_ID, XML_DESC, XML_DATA)");
sql.append(" VALUES (?,?,XMLTYPE(?))");
pStmt = conn.prepareStatement(sql.toString());
pStmt.setString(1, "101");
pStmt.setString(2, "XML Information support data");
pStmt.setString(3, xmlData);
pStmt.executeUpdate();
conn.commit();
}catch (SQLException e){
conn.rollback();
e.printStackTrace();
}finally{
if(pStmt != null) pStmt.close();
if(conn != null) conn.close();
}
}
หมายเหตุ : สามารถใช้ได้กับ XML ขนาดสูงสุดที่ 64K เท่านั้น หากมีขนาดมากว่า 64k จะไม่สามารถใช้ได้
อ้างอิง
Loading a large XML Document into the Database