真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

初識(shí)Oracle的XMLType

Oracle xmltype是從Oracle 9i開始支持一種新的數(shù)據(jù)類型,用于存儲(chǔ)和管理xml數(shù)據(jù),并提供了很多的functions,用來保存、檢索和操作xml文檔和管理節(jié)點(diǎn)。XMLType是系統(tǒng)定義的類型,所以可以使用它作為一個(gè)函數(shù)的參數(shù)或表或視圖中的列的數(shù)據(jù)類型。也可以創(chuàng)建表和視圖的XMLType。當(dāng)你創(chuàng)建一個(gè)表中的一個(gè)XMLType列,你可以選擇XML數(shù)據(jù)存儲(chǔ)在一個(gè)CLOB列,作為二進(jìn)制XML(內(nèi)部存儲(chǔ)為CLOB),或?qū)ο蟮年P(guān)系。

成都創(chuàng)新互聯(lián)客戶idc服務(wù)中心,提供成都天府聯(lián)通服務(wù)器托管、成都服務(wù)器、成都主機(jī)托管、成都雙線服務(wù)器等業(yè)務(wù)的一站式服務(wù)。通過各地的服務(wù)中心,我們向成都用戶提供優(yōu)質(zhì)廉價(jià)的產(chǎn)品以及開放、透明、穩(wěn)定、高性價(jià)比的服務(wù),資深網(wǎng)絡(luò)工程師在機(jī)房提供7*24小時(shí)標(biāo)準(zhǔn)級(jí)技術(shù)保障。

下面將介紹Oracle XMLType的一些基本使用。

1、創(chuàng)建一個(gè)包含XMLType類型列的表,并插入測(cè)試數(shù)據(jù)

zx@TEST>create table t1 (id number,xml_data sys.xmltype);

Table created.

zx@TEST>desc t1
 Name												       Null?	Type
 ----------------------------------------------------------------------------------------------------- -------- --------------------------------------------------------------------
 ID														NUMBER
 XML_DATA													SYS.XMLTYPE

 zx@TEST>insert into t1 values(1,'abc');
insert into t1 values(1,'abc')
            *
ERROR at line 1:
ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00210: expected '<' instead of 'a'
Error at line 1

zx@TEST>insert into t1 values(1,'1');

1 row created.

zx@TEST>col xml_data for a80
zx@TEST>select * from t1;

	ID XML_DATA
---------- --------------------------------------------------------------------------------
	 1 1

從上面看出,XMLType可以做為列中列的數(shù)據(jù)類型,在插入數(shù)據(jù)時(shí)必須符合XML格式才能插入,否則會(huì)報(bào)錯(cuò)。

2、查看XMLType的存儲(chǔ)形式

從user_segments視圖中看出XMLType列是以LOB字段存儲(chǔ)的

zx@TEST>select segment_name,segment_type from user_segments;

SEGMENT_NAME		       SEGMENT_TYPE
------------------------------ ------------------------------------------------------
T1			       TABLE
SYS_IL0000074607C00003$$       LOBINDEX
SYS_LOB0000074607C00003$$      LOBSEGMENT

查看user_lobs是否對(duì)應(yīng)xml_data列

zx@TEST>col column_name for a30
zx@TEST>col table_name for a30
zx@TEST>select table_name,column_name,segment_name from user_lobs;

TABLE_NAME		       COLUMN_NAME		      SEGMENT_NAME
------------------------------ ------------------------------ ------------------------------
T1			       SYS_NC00003$		      SYS_LOB0000074607C00003$$

從上面的查詢結(jié)果可以看到LOBSEGMENT對(duì)應(yīng)的表T1中的列SYS_NC00003$,而不是XML_DATA列,而且表T1中沒有這個(gè)列,再次查詢user_tab_cols視圖

zx@TEST>col data_type for a30
zx@TEST>select TABLE_NAME,COLUMN_NAME,DATA_TYPE,HIDDEN_COLUMN,COLUMN_ID from user_tab_cols;

TABLE_NAME		       COLUMN_NAME		      DATA_TYPE 		     HIDDEN_CO	COLUMN_ID
------------------------------ ------------------------------ ------------------------------ --------- ----------
T1			       ID			      NUMBER			     NO 		1
T1			       XML_DATA 		      XMLTYPE			     NO 		2
T1			       SYS_NC00003$		      CLOB			     YES		2

從上面的查詢中可以看出列SYS_NC00003$是表T1中的隱藏列,它與列XML_DATA列的COLUMN_ID都是2,說明它們是同一列。由此可以看出XMLType類型的數(shù)據(jù)由CLOB類型列協(xié)助保存。由下面的表定義也可以推斷出這一點(diǎn):

zx@TEST>select dbms_metadata.get_ddl('TABLE','T1',USER) from dual;

DBMS_METADATA.GET_DDL('TABLE','T1',USER)
--------------------------------------------------------------------------------

  CREATE TABLE "ZX"."T1"
   (	"ID" NUMBER,
	"XML_DATA" "SYS"."XMLTYPE"
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENT
S 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT
 FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"
 XMLTYPE COLUMN "XML_DATA" STORE AS BASICFILE CLOB (
  TABLESPACE "USERS" ENABLE STORAGE IN ROW CHUNK 8192 PCTVER
SION 10
  NOCACHE LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL
 DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAUL
T))

3、關(guān)于XML的一些函數(shù)

1) sys.xmltype.createxml函數(shù)

使用sys.xmltype.createxml創(chuàng)建XMLType類型的數(shù)據(jù)

zx@TEST>insert into t1 values(2,
  2  sys.xmltype.createxml('
  3  
  4    
  5      -----nam0-22-----^^^450-
  6      
  7        抗震救災(zāi)
  8         奧運(yùn)會(huì)
  9      
 10      
 11        經(jīng)濟(jì)學(xué)
 12         計(jì)算機(jī)
 13         10001
 14         2005-07-09
 15      
 16      
 17         計(jì)算機(jī)
 18         筆記本
 19      
 20    
 21  '));

1 row created.
zx@TEST>commit;

Commit complete.

zx@TEST>col xml_data for a80
zx@TEST>select * from t1;

        ID XML_DATA
---------- --------------------------------------------------------------------------------
         2 
           
             
               -----nam0-22-----^^^450-
               
                 抗震救災(zāi)
                 奧運(yùn)會(huì)
               
               
                 經(jīng)濟(jì)學(xué)
                 計(jì)算機(jī)
                 10001
                 2005-07-09
               
               
                 計(jì)算機(jī)
                 筆記本
               
             
           

2) extractvalue函數(shù)

extractvalue函數(shù)提供對(duì)XML文件的檢索功能只能返回一個(gè)節(jié)點(diǎn)的一個(gè)值,如果該節(jié)點(diǎn)有多個(gè)值,則系統(tǒng)提示錯(cuò)誤。

zx@TEST>col data for a80
zx@TEST>select extractvalue(i.xml_data,'/collection/record/leader') data from t1 i;

DATA
--------------------------------------------------------------------------------
-----nam0-22-----^^^450-

zx@TEST>select extractvalue(i.xml_data,'/collection/record/datafield') data from t1 i;
select extractvalue(i.xml_data,'/collection/record/datafield') data from t1 i
                                                                         *
ERROR at line 1:
ORA-19025: EXTRACTVALUE returns value of only one node

3) extract函數(shù)

extract函數(shù)查詢XMLType的內(nèi)容,它可以返回一個(gè)節(jié)點(diǎn)下的所有值。它返回的是XML格式的。

zx@TEST>select extract(i.xml_data,'/collection/record/datafield/subfield') data from t1 i;

DATA
--------------------------------------------------------------------------------
抗震救災(zāi)奧運(yùn)
會(huì)經(jīng)濟(jì)學(xué)計(jì)算機(jī)100012005-07-09計(jì)算機(jī)筆記本

查詢tag="610",且code="a"所對(duì)應(yīng)的值

zx@TEST>select extract(i.xml_data,'/collection/record/datafield[@tag="610"]/subfield[@code="a"]') data from t1 i;

DATA
--------------------------------------------------------------------------------
計(jì)算機(jī)筆記本<
/subfield>

4) table和XMLSequence 

如果只想返回它值就要是用上面的兩個(gè)函數(shù)了。

zx@TEST>select extractvalue(value(i),'/subfield') data
  2  from t1 x,
  3  table(xmlsequence(extract(x.xml_data,'/collection/record/datafield[@tag="610"]/subfield[@code="a"]'))) i;

DATA
--------------------------------------------------------------------------------
計(jì)算機(jī)
筆記本

4) updatexml

使用updatexml更新XMLType里的內(nèi)容,把tag="209"、code="a"的經(jīng)濟(jì)學(xué)修改為“趙旭”

zx@TEST>update t1 set xml_data=
  2  updatexml(xml_data,'/collection/record/datafield[@tag="209"]/subfield[@code="a"]/text()','趙旭');

1 row updated.

zx@TEST>select * from t1;

        ID XML_DATA
---------- --------------------------------------------------------------------------------
         2 
           
             
               -----nam0-22-----^^^450-
               
                 抗震救災(zāi)
                 奧運(yùn)會(huì)
               
               
                 趙旭
                 計(jì)算機(jī)
                 10001
                 2005-07-09
               
               
                 計(jì)算機(jī)
                 筆記本
               
             
           

參考:http://blog.csdn.net/r_youxia_dayu/article/details/6686106

http://database.51cto.com/art/200911/163928.htm

http://blog.itpub.net/17203031/viewspace-708738/

官方文檔:

http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/t_xml.htm#ARPLS369

http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions225.htm#SQLRF06172

http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions060.htm#SQLRF00640

http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions061.htm#SQLRF06173


分享題目:初識(shí)Oracle的XMLType
文章分享:http://weahome.cn/article/gejcdo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部