0

OracleXE11を使用してDataBaseを作成しようとしていますが、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>

CustomerAddress.xml

<?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:

CREATE OR REPLACE DIRECTORY XMLDIR AS 'C:\xml_files';

ステップ 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行のみを作成するためです)

私は疑問に思いました...おそらくPROCEDURE(PL / SQL)が私を助けてくれるでしょう

そして、別の問題は次のとおりです (更新/挿入/削除のためにそれらすべてを使用する必要があります): - Xpath - DOM - SAX - Xquery - 入力された XML ファイルを検証するための XML スキーマの作成 - DB からデスクトップ上の file.xml に XML ファイルを書き込む - 読み取りデスクトップからDBへの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>

行 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>

. . .

行 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>

私の意見では、XMLTYPEテーブルはどのように見えるべきかが間違っているかもしれません(また、SQLクエリを使用して挿入/削除/更新などの単純な操作を使用してこのXMLDBを操作する必要があります)

4

1 に答える 1

0

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;
于 2015-01-06T14:35:15.060 に答える