Insert XML to Oracle XMLType
มีงานที่ต้องนำข้อมูลที่อยู่ในรูปแบบ 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
No comments yet.