首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle XMLTable / XMLTYPE (没有想法)

Oracle XMLTable / XMLTYPE (没有想法)
EN

Stack Overflow用户
提问于 2015-01-04 23:47:10
回答 1查看 1K关注 0票数 0

我正在尝试使用OracleXE11创建DataBase,而我要做的是创建XML表并向其中输入数据。

步骤1:

代码语言:javascript
复制
CREATE TABLE Customer(
  customerId int Primary KEY,
  signUpDate Date NOT NULL,
  CustomerData XMLTYPE,
  CustomerAdress XMLTYPE);

第2步:

CustomerData.xml

代码语言:javascript
复制
<?xml version="1.0"?>
<CustomerData>
    <Customer>
        <name>Alex Smith</name>
        <type>Fleet</type>
        <nip>1234567890</nip>
    </Customer>
    <Customer>
        <name>Saly North</name>
        <type>person</type>
        <nip>2345678901</nip>
    </Customer>
<CustomerData>

CustomerAdress.xml

代码语言:javascript
复制
<?xml version="1.0"?>
<CustomerAdress>
    <Adress>
        <city>Xxxx</city>
        <street>Yyyy 2</Street>
        <postcode>56-200</postcode>
    </Adress>
    <Adress>
        <city>Zzzz</city>
        <Street>Uuuu 5</street>
        <postcode>57-300</postcode>
    </Adress>
<CustomerAdress>

第3步:

代码语言:javascript
复制
CREATE OR REPLACE DIRECTORY XMLDIR AS 'C:\xml_files';

第四步:现在我遇到了一个问题,因为我不知道如何输入这些数据。我试过:

代码语言:javascript
复制
INSERT INTO Customer (customerId, signUpDate, CustomerData, CustomerAdress) VALUES 
(1, to_date('12-05-1970','dd-mm-yyyy'), XMLType(bfilename('XMLDIR', 'CustomerData.xml'), nls_charset_id('AL32UTF8')), XMLType(bfilename('XMLDIR', 'CustomerAdress.xml'), nls_charset_id('AL32UTF8')));

但是它返回了1行(我知道为什么...因为使用我声明的所有xml文件只创建了1行)

我想知道..。也许一个过程(PL/SQL)会对我有所帮助

另一个问题是(我需要将它们全部用于更新/插入/删除):- Xpath - DOM - SAX - Xquery -创建XML模式以验证输入的XML文件-将XML文件从数据库写入桌面上的file.xml -从桌面读取XML file.xml

我甚至不确定我是不是一开始就做得很好。//------------------------------------------------------------//我正在尝试将how文件插入到表中,但我不知道如何将数据与how文件分开

我期待的是什么?

第1行:

代码语言:javascript
复制
customerId = 1 || 
signUpDate = 12-05-1970 || 
CustomerData = <name>Alex Smith</name> <type>Fleet</type> <nip>1234567890</nip> ||
CustomerAdress = <city>Xxxx</city> <street>Yyyy 2</Street> <postcode>56-200</postcode>

第2行:

代码语言:javascript
复制
customerId = 2 || 
signUpDate = 26-10-2007 || 
CustomerData = <name>Saly North</name> <type>Person</type> <nip>2345678901</nip> ||
CustomerAdress = <city>Zzzz</city> <street>Uuuu 5</Street> <postcode>57-300</postcode>

。。。

第n行:

代码语言:javascript
复制
customerId = n || 
signUpDate = dd-mm-yyy || 
CustomerData = <name>Xxx Yyy</name> <type>Xxx</type> <nip>nnnnnnnnnn</nip> ||
CustomerAdress = <city>Xxx</city> <street>Xxx</Street> <postcode>xx-xxx</postcode>

在我看来,这就是XMLTYPE表应该是什么样子,但我可能错了(我还需要使用简单的操作来操作这个XMLDB,比如使用sql查询进行插入/删除/更新)

EN

回答 1

Stack Overflow用户

发布于 2015-01-06 22:35:15

我想你正在寻找XMLTable函数,如果你需要解析xml文件,它是非常有用的。您可以将xml加载到另一个表中,例如customer_xml,然后使用XMLTable函数解析xml数据并插入到主表customer中。例如:

代码语言:javascript
复制
CREATE TABLE CUSTOMER (customerid NUMBER,
                       signupdate DATE,
                       name VARCHAR2(255),
                       type VARCHAR2(255),
                       nip  VARCHAR2(255))
/
CREATE TABLE CUSTOMER_XML (dataxml XMLTYPE)
/
CREATE SEQUENCE seq_customer_id START WITH 1 INCREMENT BY 1
/
CREATE PROCEDURE p_customer_insert
IS
TYPE t_customer_aat IS TABLE OF customer%ROWTYPE INDEX BY PLS_INTEGER;
l_customer_aat t_customer_aat;
l_dataxml XMLTYPE;
BEGIN
    SELECT dataxml INTO l_dataxml
    FROM customer_xml;

    SELECT seq_customer_id.NEXTVAL, sysdate, x.* 
    BULK COLLECT INTO l_customer_aat
    FROM XMLTABLE('/CustomerData/Customer' PASSING l_dataxml
                                           COLUMNS
                                           name VARCHAR2(255) PATH 'name',
                                           type VARCHAR2(255) PATH 'type',
                                           nip  VARCHAR2(255) PATH 'nip') x;

     FORALL indx in 1..l_customer_aat.COUNT
         INSERT INTO customer VALUES l_customer_aat(indx);
     COMMIT;
END;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27767249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档