XML TYPE Detail

XMLTYPE has built-in functions to allow us to manipulate the data values being placed into the column defined as SYS.XMLTYPE. Data may be inserted into the table using the sys.xmltype.createxml procedure like this:

SQL> CREATE TABLE testxml (id NUMBER(3), dt SYS.XMLTYPE);

Table created.

SQL>
SQL>
SQL> INSERT INTO testxml VALUES(111,
  2  sys.xmltype.createxml(
  3  '<?xml version="1.0"?>
  4  <customer>
  5  <name>Joe Smith</name>
  6  <title>Mathematician</title>
  7  </customer>'))
  8  /

1 row created.

SQL>
SQL> SET LONG 2000
SQL>
SQL> SELECT *
  2  FROM testxml
  3  /

ID                                        DT
------------------------------
111            <?xml version="1.0"?><customer><name>Joe Smith</name><title>Mathematician</title></customer>


SQL>
SQL> drop table testxml;

Table dropped.

SQL>

 Use sys.xmltype.createxml to add XML data to table

SQL> CREATE TABLE testxml (id NUMBER(3), dt SYS.XMLTYPE);

Table created.

SQL>
SQL>
SQL> INSERT INTO testxml VALUES(111,
  2  sys.xmltype.createxml(
  3  '<?xml version="1.0"?>
  4  <customer>
  5  <name>Joe Smith</name>
  6  <title>Mathematician</title>
  7  </customer>'))
  8  /

1 row created.

SQL>
SQL> SET LONG 2000
SQL>
SQL> SELECT *
  2  FROM testxml
  3  /

ID     DT
----------------------------------------------------------------------------------------
111    <?xml version="1.0"?><customer><name>Joe Smith</name><title>Mathematician</title></customer>


SQL>
SQL> SELECT t.dt.getclobval()
  2  FROM testxml t
  3  WHERE ROWNUM < 2
  4  /

T.DT.GETCLOBVAL()
--------------------------------------------------------------------------------
<?xml version="1.0"?>
<customer>
<name>Joe Smith</name>
<title>Mathematician</title>
</customer>


SQL>
SQL> drop table testxml;

Table dropped.

SQL>
SQL>

 

Retrieve value from SYS.XMLTYPE column

SQL> CREATE TABLE testxml (id NUMBER(3), dt SYS.XMLTYPE);

Table created.

SQL>
SQL>
SQL> INSERT INTO testxml VALUES(111,
  2  sys.xmltype.createxml(
  3  '<?xml version="1.0"?>
  4  <customer>
  5  <name>Joe Smith</name>
  6  <title>Mathematician</title>
  7  </customer>'))
  8  /

1 row created.

SQL>
SQL> SET LONG 2000
SQL>
SQL> SELECT *
  2  FROM testxml
  3  /

ID              DT
------------------------------------------------------------------------------------------------------------
111             <?xml version="1.0"?><customer><name>Joe Smith</name><title>Mathematician</title></customer>


SQL>
SQL>
SQL> SELECT *
  2  FROM testxml t
  3  WHERE t.dt.getclobval() LIKE '%Joe%'
  4  /

ID        DT
------------------------------------------------------------------------------------------------------
111       <?xml version="1.0"?><customer><name>Joe Smith</name><title>Mathematician</title></customer>


SQL>
SQL> drop table testxml;

Table dropped.

SQL>
SQL>

 

Individual fields from the XMLTYPE'd column may be found using the EXTRACTVALUE function like this:

SQL>
SQL>
SQL> --EXTRACTVALUE is an Oracle function that uses an XPath expression,
SQL>
SQL> CREATE TABLE testxml (id NUMBER(3), dt SYS.XMLTYPE);

Table created.

SQL>
SQL>
SQL> INSERT INTO testxml VALUES(111,
  2  sys.xmltype.createxml(
  3  '<?xml version="1.0"?>
  4  <customer>
  5  <name>Joe Smith</name>
  6  <title>Mathematician</title>
  7  </customer>'))
  8  /

1 row created.

SQL>
SQL> SET LONG 2000
SQL>
SQL> SELECT *
  2  FROM testxml
  3  /

ID      DT
----------------------------------------------------------------------------------------------------
111     <?xml version="1.0"?><customer><name>Joe Smith</name><title>Mathematician</title></customer>


SQL>
SQL> select EXTRACTVALUE(t.dt,'//customer/name') from testxml t;

EXTRACTVALUE(T.DT,'//CUSTOMER/NAME')
-----------------------------------------------------------------------------------------
Joe Smith

SQL>
SQL>
SQL> drop table testxml;

Table dropped.

SQL>
SQL>

 

Creation of tables using XMLType data type and set the xml schema

SQL>
SQL> CREATE TABLE xml_or (
  2     id    NUMBER PRIMARY KEY,
  3     doc   XMLTYPE)
  4     XMLTYPE doc STORE AS OBJECT RELATIONAL
  5        XMLSCHEMA "http://127.0.0.1/xdoc.xsd"
  6        ELEMENT "doc"
  7  /

 

Insert xml document to a XMLType column with xmltype function

SQL> CREATE TABLE myTable(
  2      id  NUMBER PRIMARY KEY,
  3      emps XMLType NOT NULL
  4  );

Table created.

SQL>
SQL> INSERT INTO myTable VALUES (1, xmltype('<?xml version="1.0" standalone="no"
 ?>
  2  <emps>
  3      <emp>
  4          <home_address>address 1</home_address>
  5      </emp>
  6  </emps>')
  7  );

1 row created.

SQL>
SQL>
SQL> select extract(emps, '/emps/emp/home_address/text()' )
  2  from myTable
  3  /



EXTRACT(EMPS,'/EMPS/EMP/HOME_ADDRESS/TEXT()')
------------------------------------------------------
address 1

1 row selected.

SQL>
SQL>
SQL> drop table myTable;

Table dropped.

SQL>
SQL>
SQL> 
 
 

 

PL/SQL ability to access text within an XML document in the database

SQL> CREATE TABLE myTable
  2  (id  NUMBER PRIMARY KEY
  3  ,doc XMLType NOT NULL)
  4  XMLTYPE doc STORE AS CLOB
  5  /

Table created.

SQL>
SQL>
SQL> 
SQL> DECLARE
  2      v_doc  XMLType;
  3      v_text varchar2(100);
  4  BEGIN
  5      select doc into v_doc from myTable
  6      where id = 2;
  7
  8      v_text := v_doc.extract('/message/body/text()' ).getstringval;
  9
 10      dbms_output.put_line(v_text);
 11  END;
 12  /

SQL>
SQL> drop table myTable;

Table dropped.

SQL>

 

Query xmltype column

SQL> create table myTable(
  2     id number(9),
  3     myValue xmltype
  4  );

Table created.

SQL> begin
  2    dbms_xmlschema.registerSchema ('http://d.com/myType.xsd',xdbURIType('/xsd/myType.xsd').getClob(),True,True,False,True);
  3  end;
  4  /


SQL>
SQL> insert into myTable values (67, XMLTYPE('<myType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://d.com/myType.xsd">
  2       <value1>1</value1>
  3       <value2>2</value2>
  4   </myType>'))
  5  /

1 row created.

SQL>
SQL> select * from myTable;



   emp
Number
------
MYVALUE
------------------------------------------------------
    67
<myType xmlns:xsi="http://www.w3.org/2001/XMLSchema-in
stance" xsi:noNamespaceSch

1 row selected.

SQL>
SQL> drop table myTable;

Table dropped.

 

Store an XMLType type data in clob

SQL> CREATE TABLE myTable
  2    (myID            NUMBER PRIMARY KEY,
  3     myValue     XMLTYPE )
  4     XMLTYPE myValue STORE AS CLOB
  5  /

Table created.



SQL>
SQL> drop table myTable;

Table dropped.

SQL>
SQL>

 Use value function with single xmltype table

SQL> create table myTable of xmltype;

Table created.

SQL>
SQL> insert into myTable values(XMLTYPE('
  2    <customer>
  3     <name>Chris</name>
  4      <telephone>123 555-1234</telephone>
  5    </customer>'))
  6  /

1 row created.

SQL>
SQL> select * from myTable;



SYS_NC_ROWINFO$
------------------------------------------------------

  <customer>
   <name>Chris</name>
    <telephone>123 555-1234</telephone>
  </

1 row selected.

SQL>
SQL> update myTable c
  2  set value(c) = updateXML(value(c), '/customer/name/text()','new value')
  3  /

1 row updated.

SQL>
SQL>
SQL> select extractvalue(value(c),'/customer/telephone')
  2  from myTable c
  3  where existsnode(value(c),'/customer/name = "Chris"') = 1
  4  /

no rows selected

SQL>
SQL> drop table myTable;

Table dropped.

SQL>

 Use xmltype to convert xml string to xmltype data

SQL>
SQL>
SQL> CREATE TABLE myTable(
  2      id  NUMBER PRIMARY KEY,
  3      emps XMLType NOT NULL
  4  );

Table created.

SQL>
SQL> INSERT INTO myTable VALUES (1, xmltype('<?xml version="1.0" standalone="no"
 ?>
  2  <emps>
  3      <emp>
  4          <home_address>address 1</home_address>
  5      </emp>
  6  </emps>')
  7  );

1 row created.

SQL>
SQL>
SQL> select extract(emps, '/emps/emp/home_address/text()' )
  2  from myTable
  3  /



EXTRACT(EMPS,'/EMPS/EMP/HOME_ADDRESS/TEXT()')
------------------------------------------------------
address 1

1 row selected.

SQL>
SQL>
SQL> drop table myTable;

Table dropped.

SQL>
SQL>

 

你可能感兴趣的:(sql,C++,c,xml,C#)