溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PLSQL中XML類型字段分析

發(fā)布時(shí)間:2021-11-10 14:59:38 來(lái)源:億速云 閱讀:326 作者:iii 欄目:關(guān)系型數(shù)據(jù)庫(kù)

這篇文章主要講解了“PLSQL中XML類型字段分析”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“PLSQL中XML類型字段分析”吧!

xmltype: 

             Oracle9i 支持一種新的系統(tǒng)定義數(shù)據(jù)類型,名為XMLType。XMLType提供了多種內(nèi)建的成員函數(shù),為創(chuàng)建、提取和索引存儲(chǔ)在Oracle9i中的XML數(shù)據(jù) 提供了一種強(qiáng)有力的機(jī)制。作為一種新的數(shù)據(jù)類型,XMLType可用作表格和視圖中的各個(gè)列的數(shù)據(jù)類型,并可在PL/SQL存儲(chǔ)過(guò)程中作為參數(shù)、返回值和 變量使用。

      利用XMLType和這些功能,SQL開發(fā)者既可利用關(guān)系型數(shù)據(jù)庫(kù)的強(qiáng)大能力,也可在XML的環(huán)境下工作。與此類似,XML開發(fā)者一方面可利用XML標(biāo)準(zhǔn)的強(qiáng)大能力,另一方面又能在關(guān)系型數(shù)據(jù)庫(kù)的環(huán)境下工作。

  • 建立含有xmltype數(shù)據(jù)類型的表

CREATE TABLE abc 
(id number,
xmldoc sys.xmltype);

    聲明xmltype型字段用:sys.xmltype

  • 向帶有xmltype類型的表插入帶有數(shù)據(jù)

INSERT INTO abc
  (id
  ,xmldoc) VALUE
  (abc.nextval
  ,sys.xmltype.createxml('<name><aid="1" value="some values">abc</a></name>'));

    插入用 sys.xmlType.createXML('some xml doc')

  • 直接查詢xmltype字段里面的內(nèi)容

     得到id=1的value變量的值

SELECT i.xmldoc.extract('//name/a[@id=1]/@value').getstringval() AS ennames
      ,id
FROM   abc i

      得到a節(jié)點(diǎn)的值

SELECT id
      ,i.xmldoc.extract('//name/a/text()').getstringval() AS truename
FROM   abc i

     得到節(jié)點(diǎn)id屬性的值

SELECT hd.data_t.extract('/root/name/@id').getstringval() AS NAME
FROM   sehr_house_data hd
  • 更新xmltype里面的數(shù)據(jù)

UPDATE abc
SET    xmldoc = updatexml(xmldoc, '//name/a[@id=1]/@value', 'some new value')
WHERE  ......

(注意:如果里面沒有<aid="1">這個(gè)節(jié)點(diǎn),將不能update)

  • 添加超過(guò)4k字節(jié)的xml文檔到xmltype型字段

可以通過(guò)使用臨時(shí)表的辦法實(shí)現(xiàn):
先建立一個(gè)臨時(shí)的表,其中的一個(gè)字段是clob類型;
再將要寫入xmltype字段的xml doc寫入這個(gè)臨時(shí)的clob型的字段中;
最后insertinto abc (id,xmldoc) values (abc_q.nextval , sys.xmlType.createXML((select contentfrom 臨時(shí)表whereid=......)));

EXISTSNODE
--EXISTSNODE函數(shù)檢查XML中的某一個(gè)節(jié)點(diǎn)是否存在。如果存在,返回1,否則返回0。  
SELECT existsnode(VALUE(a), 'Corporation/Name')
FROM   TABLE(xmlsequence(extract(v_xml, 'Root/Corporation'))) a;
SELECT COUNT(*)
FROM   TABLE(xmlsequence(extract(v_xml, 'Root/Corporation'))) a
WHERE  existsnode(xmlvalue, 'Corporation/Name[@id=1]') = 1;
EXTRACTVALUE
--EXTRACTVALUE()是從某個(gè)節(jié)點(diǎn)中讀取值。ExtractValue只能返回一個(gè)確切的位置節(jié)點(diǎn)的值,如果存在多個(gè)相同節(jié)點(diǎn),Oracle就會(huì)報(bào)錯(cuò) 。
SELECT extractvalue(VALUE(a), 'Corporation/Name') cor_nam
FROM   TABLE(xmlsequence(extract(v_xml, 'Root/Corporation'))) a;
EXTRACT
--EXTRACT函數(shù)返回一個(gè)XML文檔的一個(gè)節(jié)點(diǎn)樹,或者某一節(jié)點(diǎn)下所有符合條件的節(jié)點(diǎn)。
  SELECT extract(VALUE(a), 'Corporation/Persons/Person') cor_person
  
  FROM   TABLE(xmlsequence(extract(v_xml, 'Root/Corporation'))) a;
Xmlsequence、TABLE
--利用xmlsequence()和table()返回符合條件的節(jié)點(diǎn)的值 。
SELECT extract(VALUE(a), 'Corporation/Persons/Person') cor_person
FROM   TABLE(xmlsequence(extract(v_xml, 'Root/Corporation'))) a;
實(shí)例:
SELECT sys.xmltype.createxml(t.value1).extract('//TResponse/OrderInfo/OrderInfos/text()')
       .getclobval()
FROM   abc t

感謝各位的閱讀,以上就是“PLSQL中XML類型字段分析”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)PLSQL中XML類型字段分析這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI