Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle XMLTable/XMLTYPE(不知道)_Xml_Oracle_Plsql_Xmltype_Xmltable - Fatal编程技术网

Oracle XMLTable/XMLTYPE(不知道)

Oracle XMLTable/XMLTYPE(不知道),xml,oracle,plsql,xmltype,xmltable,Xml,Oracle,Plsql,Xmltype,Xmltable,我正在尝试使用OracleXE11创建数据库,我要做的是创建XML表并向其中输入数据 步骤1: CREATE TABLE Customer( customerId int Primary KEY, signUpDate Date NOT NULL, CustomerData XMLTYPE, CustomerAdress XMLTYPE); 步骤2: CustomerData.xml <?xml version="1.0"?> <CustomerData>

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

步骤1:

CREATE TABLE Customer(
  customerId int Primary KEY,
  signUpDate Date NOT NULL,
  CustomerData XMLTYPE,
  CustomerAdress XMLTYPE);
步骤2:

CustomerData.xml

<?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>
步骤4: 现在我有一个问题,因为我不知道如何输入这些数据。 我试图:

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 -多姆 -萨克斯 -Xquery -创建XML架构以验证输入的XML文件 -将XML文件从DB写入桌面上的file.XML -将XML file.XML从桌面读取到数据库

我甚至不确定我的开始是否顺利。 //------------------------------------------------------------// 我正试图将xmlfile插入表中,但我不知道如何从xmlfile中分离数据

我在期待什么

第1行:

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>
customerId=1 ||
signUpDate=12-05-1970 | |
CustomerData=Alex Smith车队1234567890||
CustomerAddress=Xxxx Yyyy 2 56-200
第2行:

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>
customerId=2 ||
signUpDate=26-10-2007 | |
CustomerData=Saly North人员2345678901||
客户地址=ZZZUUUU5 57-300
。 .

第n行:

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>
customerId=n | |
signUpDate=dd-mm-yyy | |
CustomerData=Xxx Yyy Xxx nnnnnnnnnnnn||
CustomerAddress=Xxx Xxx Xxx Xxx

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

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

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;

如果在表中插入一行,则在select上返回一行。你到底在期待什么?请解释您要选择的内容。你的另一个问题太宽泛了。
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>
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;