2015-01-04 5 views
0

나는 OracleXE11을 사용하여 DataBase를 작성하려고하는데 무엇을해야할까요? XML 테이블을 작성하고 데이터를 입력하는 것입니다.Oracle XMLTable/XMLTYPE (아이디어 없음)

단계 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> 

CustomerAdress.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 단계 : 이제는 데이터 입력 방법을 모르기 때문에 문제가 있습니다. I가 시도했다 :

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'))); 

하지만 내가 궁금

(때문에 선언 한 모든 XML 파일을 사용하는 경우에만 1 행을 만드는 난 ... 이유를 알고) 나에게 1 개 행을 반환 .. . 어쩌면 절차 (PL/SQL)는 그

나에게 도움이 될 것입니다 그리고 또 다른 문제는 (내가 삭제/갱신/삽입을 위해 모두를 사용할 필요가) 있습니다 - XPath는 - DOM - SAX - XQuery를 - 입력 된 XML 파일의 유효성을 검사하기위한 XML 스키마 생성 - DB의 XML 파일을 데스크탑의 file.xml에 작성하십시오. - 데스크탑에서 DB로 XML file.xml을 읽으십시오.

메신저가 잘 시작되었는지 확실하지 않습니다. // ----------------------------------------------- ------------- // 임 테이블에 XMLFILE를 삽입하려고하지만 난

XMLFILE 데이터 형태를 분리하는 방법을 잘 모릅니다 무엇

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

ROW 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은 : 또한 내가 삽입처럼 단순히 연산을 사용하여이 XMLDB에서 작동하도록해야합니다 (XMLTYPE 테이블이해야처럼 보이지만 내가 잘못 될 수 있는지 내 의견

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> 

가 이잖아/SQL 쿼리를 사용하여/업데이트 삭제)

+0

테이블에 한 행을 삽입하면 선택 영역에 한 행이 다시 나타납니다.정확하게 당신은 무엇을 기대하고 있습니까? 선택하려고하는 것을 설명하십시오. 귀하의 다른 질문은 너무 광범위합니다. – OldProgrammer

답변

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;