欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Oracle操作XML各種場(chǎng)景介紹

最近在研究Oracle PLSQL中對于XML的系列操作。結合工作中使用的知識和參考資料整理出以下相關(guān)內容:

一 如何生成XML文件:

1、使用dbms_xmlquery和utl_file內置包(scott用戶(hù)執行)

  1. CREATE OR REPLACE DIRECTORY xml_dir AS 'd:\app\xml';  
  2.   
  3. DROP SEQUENCE seq_filename;  
  4. CREATE SEQUENCE seq_filename   
  5.     MINVALUE 10000  
  6.     MAXVALUE 99999   
  7.     INCREMENT BY 1   
  8.     START WITH 10000   
  9.     NOCYCLE;  

  1. DECLARE  
  2.     v_filename  Varchar2(50)  := 'Empmsg'||to_char(seq_filename.nextval)||'.xml';  
  3.     xml_str     clob;  
  4.     xml_file    utl_file.file_type;  
  5.     offset      number;  
  6.     buffer      varchar2(32767);  
  7.     buffer_size number;  
  8. BEGIN  
  9.     offset      := 1;  
  10.     buffer_size := 3000;  
  11.     xml_file := utl_file.fopen('XML_DIR', v_filename, 'w');  
  12.     xml_str  := dbms_xmlquery.getxml('select empno,  
  13.                                              ename,  
  14.                                              job,  
  15.                                              mgr,  
  16.                                              hiredate,  
  17.                                              sal,  
  18.                                              comm,  
  19.                                              deptno  
  20.                                       from emp');  
  21.     
  22.     while (offset < dbms_lob.getlength(xml_str)) loop  
  23.       buffer := dbms_lob.substr(xml_str, buffer_size, offset);  
  24.       utl_file.put(xml_file, buffer);  
  25.       utl_file.fflush(xml_file);  
  26.       offset := offset + buffer_size;  
  27.     end loop;  
  28.       
  29.     utl_file.fclose(xml_file);  
  30. END;  


        2、使用XMLELEMENT系列內置函數返回xml(sys用戶(hù)執行)

  1. DECLARE  
  2.     v_filename  Varchar2(50)  := 'Empmsg'||to_char(scott.seq_filename.nextval)||'.xml';  
  3.     xml_str     clob;  
  4.     xml_file    utl_file.file_type;  
  5.     offset      number;  
  6.     buffer      varchar2(32767);  
  7.     buffer_size number;  
  8. BEGIN  
  9.     offset      := 1;  
  10.     buffer_size := 3000;  
  11.     xml_file := utl_file.fopen('XML_DIR', v_filename, 'w');  
  12.     SELECT XMLElement("DEPARTMENT"  
  13.                  , XMLAttributes( department_id as "ID"  
  14.                                 , department_name as "NAME"  
  15.                                 )  
  16.                  , XMLElement("EMPLOYEES"  
  17.                              , (SELECT XMLAgg( XMLElement("EMPLOYEE"  
  18.                                                          , XMLForest(employee_id as "ID"  
  19.                                                                     ,first_name||' '||last_name as "NAME"  
  20.                                                                     )  
  21.                                                          )  
  22.                                              )  
  23.                                  FROM hr.employees emp  
  24.                                 WHERE emp.department_id = dept.department_id  
  25.                                 )  
  26.                               )  
  27.                 ).getclobval() INTO xml_str  
  28.      FROM hr.departments dept  
  29.      WHERE department_id = 20;  
  30.     
  31.     while (offset < dbms_lob.getlength(xml_str)) loop  
  32.       buffer := dbms_lob.substr(xml_str, buffer_size, offset);  
  33.       utl_file.put(xml_file, buffer);  
  34.       utl_file.fflush(xml_file);  
  35.       offset := offset + buffer_size;  
  36.     end loop;  
  37.       
  38.     utl_file.fclose(xml_file);  
  39. END;  
--XMLElement: 將一個(gè)關(guān)系值轉換為XML元素的函數,格式為<elementName>值</elementName> 
--XMLAttributes: 用于在SQL查詢(xún)返回的 XML 元素中設置屬性的函數 
--XMLForest:      該函數返回一個(gè)或多個(gè)子元素的集合,該函數使用列名做為XML元素的名稱(chēng)并用SQL值表達式做為XML元素的內容,但使用時(shí)不能指定元素的屬性 
--XMLAgg:           在GROUP BY查詢(xún)中對XML數據進(jìn)行分組或匯總的函數 


PS: 使用SPOOL方式導出文件:

  1. SET TRIMSPOOL ON   
  2. SET TERMOUT ON   
  3. SET FEEDBACK OFF   
  4. SET VERIFY OFF   
  5. SET ECHO OFF   
  6. SET PAGESIZE 999   
  7. SET HEAD OFF   
  8. SET HEADING OFF   
  9. SET LONG 5000  
  10. spool c:\a.xml  
  11. SELECT XMLElement("DEPARTMENT"  
  12.                  , XMLAttributes( department_id as "ID"  
  13.                                 , department_name as "NAME"  
  14.                                 )  
  15.                  , XMLElement("EMPLOYEES"  
  16.                              , (SELECT XMLAgg( XMLElement("EMPLOYEE"  
  17.                                                          , XMLForest(employee_id as "ID"  
  18.                                                                     ,first_name||' '||last_name as "NAME"  
  19.                                                                     )  
  20.                                                          )  
  21.                                              )  
  22.                                  FROM employees emp  
  23.                                 WHERE emp.department_id = dept.department_id  
  24.                                 )  
  25.                               )  
  26.                 ) a  
  27.   FROM departments dept  
  28.  WHERE department_id = 10;  
  29. spool off  



二 如何存儲XML文件內容:

我們知道oracle 中xmltype數據類(lèi)型用來(lái)存儲XML內容。下面例子中介紹如何將系統中XML文件內容加載至
含有XMLTYPE類(lèi)型的表中。

  1. CREATE TABLE xml_table OF XMLTYPE;  
  2.   
  3. INSERT INTO xml_table   
  4.     VALUES(XMLTYPE(bfilename('XML_DIR','PurchaseOrder.xml'),nls_charset_id('AL32UTF8')));  
  5.       
  6.     SELECT x.sys_nc_rowinfo$.getstringval() FROM xml_table x;  
  7.       
  8. CREATE TABLE table_with_xml_column(filename VARCHAR2(64), xml_document XMLTYPE);  
  9.   
  10. INSERT INTO table_with_xml_column  
  11.     VALUES ('PurchaseOrder.xml',XMLType(bfilename('XML_DIR', 'PurchaseOrder.xml'),nls_charset_id('AL32UTF8')));  
  12.       
  13. SELECT x.xml_document.getCLOBVal() FROM table_with_xml_column x;  

PurchaseOrder.xml內容:

  1. <PurchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.   xsi:noNamespaceSchemaLocation=  
  3.     "http://localhost:8080/source/schemas/poSource/xsd/purchaseOrder.xsd">  
  4.   <Reference>SBELL-2002100912333601PDT</Reference>  
  5.   <Actions>  
  6.     <Action>  
  7.       <User>SVOLLMAN</User>  
  8.     </Action>  
  9.   </Actions>  
  10.   <Reject/>  
  11.   <Requestor>Sarah J. Bell</Requestor>  
  12.   <User>SBELL</User>  
  13.   <CostCenter>S30</CostCenter>  
  14.   <ShippingInstructions>  
  15.     <name>Sarah J. Bell</name>  
  16.     <address>400 Oracle Parkway  
  17.       Redwood Shores  
  18.       CA  
  19.       94065  
  20.       USA</address>  
  21.     <telephone>650 506 7400</telephone>  
  22.   </ShippingInstructions>  
  23.   <SpecialInstructions>Air Mail</SpecialInstructions>  
  24.   <LineItems>  
  25.     <LineItem ItemNumber="1">  
  26.       <Description>A Night to Remember</Description>  
  27.       <Part Id="715515009058" UnitPrice="39.95" Quantity="2"/>  
  28.     </LineItem>  
  29.     <LineItem ItemNumber="2">  
  30.       <Description>The Unbearable Lightness Of Being</Description>  
  31.       <Part Id="37429140222" UnitPrice="29.95" Quantity="2"/>  
  32.     </LineItem>  
  33.     <LineItem ItemNumber="3">  
  34.       <Description>Sisters</Description>  
  35.       <Part Id="715515011020" UnitPrice="29.95" Quantity="4"/>  
  36.     </LineItem>  
  37.   </LineItems>  
  38. </PurchaseOrder>  


三 如何解析XML內容:

 1、XPath結構介紹:

    
         /       表示樹(shù)根。例如:/PO 指向樹(shù)根的子節點(diǎn)<PO>; 通常也作為路徑分隔符使用,例如:/A/B
        // 表示當前節點(diǎn)下所有子節點(diǎn);例如:/A//B 匹配A節點(diǎn)下所有B節點(diǎn)
        *       作為通配符使用,匹配所有子節點(diǎn); 如:/A/*/C 匹配A節點(diǎn)下所有子節點(diǎn)C
        [ ]      表示預期表達式;XPath支持豐富的操作符如OR、AND、NOT等;例如:/PO[PONO=20 AND PNAME="PO_2"]/SHIPADDR 匹配所有訂單號為20并且訂單名為PO_2的送貨地址
@ 用來(lái)提取節點(diǎn)屬性
        FunctionsXPath支持一些內置函數如:substring(), round() 和 not(). 

      2、使用XMLTYPE方法查詢(xún)XML:


            SELECT x.OBJECT_VALUE.getCLOBVal() FROM xml_table x;

             SELECT x.OBJECT_VALUE.getSTRINGVal() FROM xml_table x;

      3、使用函數解析XML:


--existsNode 判斷XPath中節點(diǎn)是否存在,存在返回值1 不存在返回0;
  1. SELECT existsNode(OBJECT_VALUE, '/PurchaseOrder/Reference')  
  2. FROM purchaseorder;  


--extractValue  提取XPath節點(diǎn)值
  1. SELECT extractValue(OBJECT_VALUE, '/PurchaseOrder/Reference')  
  2. FROM purchaseorder  
  3. WHERE existsNode(OBJECT_VALUE, '/PurchaseOrder/Reference') = 1;  



--extract   提取XPath節點(diǎn)
  1. SELECT extract(OBJECT_VALUE, '/PurchaseOrder/Reference') "REFERENCE"  
  2. FROM purchaseorder;  

4、使用SQL解析XML:


  1. SELECT extractValue(OBJECT_VALUE, '/PurchaseOrder/Reference') REFERENCE,  
  2.     extractValue(OBJECT_VALUE, '/PurchaseOrder/*//User') USERID,  
  3.     CASE  
  4.         WHEN existsNode(OBJECT_VALUE, '/PurchaseOrder/Reject') = 1  
  5.         THEN 'Rejected'  
  6.         ELSE 'Accepted'  
  7.     END "STATUS",  
  8. extractValue(OBJECT_VALUE, '//CostCenter') CostCenter  
  9. FROM purchaseorder  
  10. WHERE existsNode(OBJECT_VALUE,'//Reject') = 1;  



四   XMLTABLE用法:


XMLTable maps the result of an XQuery evaluation into relational rows and columns. You can query the result returned by the function as a virtual relational table using SQL.
說(shuō)白了就是解析XML內容返回虛擬關(guān)系型結構數據。 下面說(shuō)個(gè)簡(jiǎn)單例子:
        
  1. CREATE TABLE warehouses(  
  2.     warehouse_id NUMBER(3),  
  3.     warehouse_spec SYS.XMLTYPE,  
  4.     warehouse_name VARCHAR2(35),  
  5. location_id NUMBER(4)  
  6. );  

  1. INSERT into warehouses (warehouse_id, warehouse_spec,warehouse_name) VALUES (100, sys.XMLType.createXML(  
  2.   
  3. '<Warehouse whNo="100">  
  4.    <opt1>  
  5.         <Building>Owned</Building>  
  6.         <WaterAccess>WaterAccess</WaterAccess>  
  7.         <RailAccess>RailAccess</RailAccess>  
  8.         <field>f1</field>  
  9.         <field>f2</field>  
  10.         <field>f3</field>  
  11.    </opt1>  
  12.    <opt2>  
  13.         <name>Dylan</name>  
  14.    </opt2>  
  15. </Warehouse>'),'Warehouse-X');      

  1. SELECT warehouse_name warehouse,  
  2.    warehouse2."whNo"  
  3. FROM warehouses,  
  4.    XMLTABLE('/Warehouse'  
  5.       PASSING warehouses.warehouse_spec  
  6.       COLUMNS   
  7.          "whNo" varchar2(100) PATH '@whNo')  
  8.       warehouse2;  

  1. SELECT warehouse_name warehouse,  
  2.    warehouse2."Water", warehouse2."Rail", warehouse2.field  
  3.    FROM warehouses,  
  4.    XMLTABLE('*//opt1'  
  5.       PASSING warehouses.warehouse_spec  
  6.       COLUMNS   
  7.          "Water" varchar2(100) PATH '//WaterAccess',  
  8.          "Rail" varchar2(100) PATH '//RailAccess',  
  9.          field XMLTYPE PATH '/')   
  10.       warehouse2;  








to be continue...

----------------------------------
By    Dylan.
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
xquery
Oracle中對XMLType的簡(jiǎn)單操作(extract、extractvalue
解決:Weblogic容器、SSH框架下Hibernate映射Oracle XMLType方法與Jar包沖突
ORACLE directory 目錄
Oracle數據類(lèi)型
create table [Oracle SQL]
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久