<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-14  評論-34  文章-0  trackbacks-0
    需要解析的xml文件:people.xml
     1 <?xml version="1.0"?>
     2 <PEOPLE>
     3     <PERSON PERSONID="E01">
     4         <NAME>Tony Blair</NAME>
     5         <ADDRESS>10 Downing Street, London, UK</ADDRESS>
     6         <TEL>(061) 98765</TEL>
     7         <FAX>(061) 98768</FAX>
     8         <EMAIL>blair@everywhere.com</EMAIL>
     9     </PERSON>
    10     <PERSON PERSONID="E02">
    11         <NAME>Bill Clinton</NAME>
    12         <ADDRESS>White House, USA</ADDRESS>
    13         <TEL>(001) 6400 98765</TEL>
    14         <FAX>(001) 6400 98769</FAX>
    15         <EMAIL>bill@everywhere.com</EMAIL>
    16     </PERSON>
    17     <PERSON PERSONID="E03">
    18         <NAME>Tom Cruise</NAME>
    19         <ADDRESS>57 Jumbo Street, New York, USA</ADDRESS>
    20         <TEL>(001) 4500 67859</TEL>
    21         <FAX>(001) 4500 67895</FAX>
    22         <EMAIL>cruise@everywhere.com</EMAIL>
    23     </PERSON>
    24     <PERSON PERSONID="E04">
    25         <NAME>Linda Goodman</NAME>
    26         <ADDRESS>78 Crax Lane, London, UK</ADDRESS>
    27         <TEL>(061) 54 56789</TEL>
    28         <FAX>(061) 54 56772</FAX>
    29         <EMAIL>linda@everywhere.com</EMAIL>
    30     </PERSON>
    31 </PEOPLE>

    我以scott用戶為例,新建表:
    1 CREATE TABLE PEOPLE
    2 (
    3   PERSONID VARCHAR2(4PRIMARY KEY,
    4   NAME VARCHAR2(50),
    5   ADDRESS VARCHAR2(200),
    6   TEL VARCHAR2(20),
    7   FAX VARCHAR2(20),
    8   EMAIL VARCHAR2(100)
    9 );

    假設(shè)表里面已經(jīng)有數(shù)據(jù),如果想從XML插入數(shù)據(jù)請看【原創(chuàng)】編寫Oracle存儲過程解析XML,并把數(shù)據(jù)持久化

    以下是把查詢結(jié)果生成XML文件的存儲過程代碼:
     1 /**
     2 *sqlStr        附加的查詢條件 如:where PERSONID = 'E01',查詢所有輸入''
     3 *file_path     文件保存路徑   如:D:\OracleTest\outpeople.xml
     4 **/
     5 CREATE OR REPLACE PROCEDURE OUTPUTPEOPLE(sqlStr VARCHAR2,file_path VARCHAR2)
     6 AS
     7     personRow PEOPLE%ROWTYPE;      --獲取游標的行變量
     8     TYPE person_cur IS REF CURSOR--自定義REF游標
     9     cur person_cur;    
    10     tempSql varchar2(500) := 'SELECT * FROM PEOPLE ';       --初始的查詢語句
    11     doc xmlDom.DOMDocument := xmldom.newDOMDocument;        -- 創(chuàng)建文檔對象
    12     main_node xmlDom.DOMNode := xmldom.makeNode(doc);       -- 獲得文檔節(jié)點
    13     root_elmt xmlDom.DOMElement:= xmldom.createElement(doc, 'PEOPLE');   -- 創(chuàng)建根元素
    14     --==================================================
    15     --以下定義元素
    16     person_elmt xmlDom.DOMElement;      --定義PERSON元素
    17     name_elmt xmlDom.DOMElement;      --定義NAME元素
    18     address_elmt xmlDom.DOMElement;      --定義ADDRESS元素
    19     tel_elmt xmlDom.DOMElement;           --定義TEL元素    
    20     email_elmt xmlDom.DOMElement;      --定義EMAIL元素    
    21     --==================================================
    22     --以下定義節(jié)點
    23     root_node xmlDom.DOMNode;   --定義PEOPLE節(jié)點
    24     person_node xmlDom.DOMNode;   --定義PERSON節(jié)點
    25     name_node xmlDom.DOMNode;   --定義NAME節(jié)點
    26     address_node xmlDom.DOMNode;   --定義ADDRESS節(jié)點
    27     tel_node xmlDom.DOMNode;   --定義TEL節(jié)點
    28     email_node xmlDom.DOMNode;   --定義EMAIL節(jié)點
    29     temp_node xmlDom.DOMNode;
    30 BEGIN
    31     -- 向文檔節(jié)點加入根節(jié)點:<PEOPLE></PEOPLE>
    32     root_node := xmldom.appendChild(main_node, xmldom.makeNode(root_elmt));
    33     --附加查詢條件
    34     tempSql := tempSql||sqlStr;
    35     --打開游標
    36     OPEN cur FOR tempSql;
    37     --遍歷游標
    38     LOOP
    39       FETCH cur INTO personRow;
    40       EXIT WHEN cur%NOTFOUND;
    41       --===========================================================================--
    42       person_elmt := xmldom.createElement(doc, 'PERSON'); --創(chuàng)建PERSON元素
    43       -- 向PEOPLE節(jié)點加入PERSON節(jié)點<PERSON></PERSON>
    44       person_node := xmldom.appendChild(root_node, xmldom.makeNode(person_elmt));
    45       --===========================================================================--
    46       --向PERSON節(jié)點加入屬性PERSONID
    47       xmlDom.SETATTRIBUTE( person_elmt, 'PERSONID', personRow.personId );
    48       --===========================================================================--
    49       name_elmt := xmldom.createElement(doc, 'NAME');      --創(chuàng)建NAME元素
    50       --向PERSON節(jié)點加入子節(jié)點NAME
    51       name_node := xmldom.appendChild(person_node,xmlDom.makeNode(name_elmt));
    52       --向NAME節(jié)點加入文本
    53       temp_node := xmldom.appendChild(name_node , xmlDom.makeNode(xmldom.createTextNode(doc,personRow.name)));
    54       --===========================================================================--
    55       address_elmt := xmldom.createElement(doc, 'ADDRESS');      --創(chuàng)建ADDRESS元素
    56       --向PERSON節(jié)點加入子節(jié)點ADDRESS
    57       address_node := xmldom.appendChild(person_node,xmlDom.makeNode(address_elmt));
    58       --向ADDRESS節(jié)點加入文本
    59       temp_node := xmldom.appendChild(address_node, xmlDom.makeNode(xmldom.createTextNode(doc,personRow.address)));
    60       --===========================================================================--
    61       tel_elmt := xmldom.createElement(doc, 'TEL');      --創(chuàng)建TEL元素    
    62       --向TEL節(jié)點加入子節(jié)點NAME
    63       tel_node := xmldom.appendChild(person_node,xmlDom.makeNode(tel_elmt));
    64       --向TEL節(jié)點加入文本
    65       temp_node := xmldom.appendChild(tel_node, xmlDom.makeNode(xmldom.createTextNode(doc,personRow.tel)));
    66       --===========================================================================--
    67       email_elmt := xmldom.createElement(doc, 'EMAIL');      --創(chuàng)建EMAIL元素    
    68       --向PERSON節(jié)點加入子節(jié)點EMAIL
    69       email_node := xmldom.appendChild(person_node,xmlDom.makeNode(email_elmt));
    70       --向EMAIL節(jié)點加入文本
    71       temp_node := xmldom.appendChild(email_node, xmlDom.makeNode(xmldom.createTextNode(doc,personRow.email)));
    72       --===========================================================================--
    73     END LOOP;
    74     CLOSE cur;
    75     --寫入硬盤
    76     xmlDom.writeToFile(doc,file_path,'GBK');
    77   EXCEPTION
    78    WHEN OTHERS THEN
    79      DBMS_output.PUT_LINE(SQLERRM);
    80 END OUTPUTPEOPLE;





    posted on 2008-03-19 21:48 Jam Chan 閱讀(3060) 評論(3)  編輯  收藏 所屬分類: Oracle

    評論:
    # re: 【原創(chuàng)】編寫Oracle存儲過程,按照條件把數(shù)據(jù)導出至XML文件[未登錄] 2008-12-07 20:38 | 過客
    為何我報的錯誤為invalid char in text  回復  更多評論
      
    # re: 【原創(chuàng)】編寫Oracle存儲過程,按照條件把數(shù)據(jù)導出至XML文件[未登錄] 2008-12-07 20:40 | 過客
    我寫的代碼如下: (pid number,file_path varchar2)
    is
    doc xmlDom.DOMDocument := xmldom.newDOMDocument; -- 創(chuàng)建文檔對象
    main_node xmlDom.DOMNode := xmldom.makeNode(doc); -- 獲得文檔節(jié)點
    root_elmt xmlDom.DOMElement:= xmldom.createElement(doc, 'PEOPLE'); -- 創(chuàng)建根元素
    person_elmt xmlDom.DOMElement; --定義PERSON元素
    name_elmt xmlDom.DOMElement; --定義NAME元素
    qyjs_elmt xmlDom.DOMElement; --定義QYJS元素
    filename_elmt xmlDom.DOMElement; --定義filename元素
    root_node xmlDom.DOMNode; --定義PEOPLE節(jié)點
    person_node xmlDom.DOMNode; --定義PERSON節(jié)點
    name_node xmlDom.DOMNode; --定義NAME節(jié)點
    qyjs_node xmlDom.DOMNode; --定義qyjs節(jié)點
    filename_node xmlDom.DOMNode; --定義filename節(jié)點
    temp_node xmlDom.DOMNode;

    v_name varchar2(64);
    v_qyjs varchar2(500);
    v_filename varchar2(200);
    begin
    SELECT NAME INTO v_name FROM FILIALE WHERE ID=pid;
    SELECT QYJS INTO v_qyjs FROM FILIALE WHERE ID=pid;
    SELECT OFILENAME INTO v_filename FROM FILIALE WHERE ID=pid;
    --生成xml文檔
    -- 向文檔節(jié)點加入根節(jié)點:<PEOPLE></PEOPLE>
    root_node := xmldom.appendChild(main_node, xmldom.makeNode(root_elmt));

    person_elmt := xmldom.createElement(doc, 'PERSON'); --創(chuàng)建PERSON元素
    -- 向PEOPLE節(jié)點加入PERSON節(jié)點<PERSON></PERSON>
    person_node := xmldom.appendChild(root_node, xmldom.makeNode(person_elmt));

    --向PERSON節(jié)點加入屬性PERSONID
    xmlDom.SETATTRIBUTE( person_elmt, 'PERSONID', pid );

    name_elmt := xmldom.createElement(doc, 'NAME'); --創(chuàng)建NAME元素
    --向PERSON節(jié)點加入子節(jié)點NAME
    name_node := xmldom.appendChild(person_node,xmlDom.makeNode(name_elmt));

    --向NAME節(jié)點加入文本
    temp_node := xmldom.appendChild(name_node , xmlDom.makeNode(xmldom.createTextNode(doc,v_name)));

    qyjs_elmt := xmldom.createElement(doc, 'QYJS'); --創(chuàng)建qyjs元素
    --向PERSON節(jié)點加入子節(jié)點qyjs
    qyjs_node := xmldom.appendChild(person_node,xmlDom.makeNode(qyjs_elmt));
    --向qyjs節(jié)點加入文本
    temp_node := xmldom.appendChild(qyjs_node,xmlDom.makeNode(xmldom.createTextNode(doc,v_qyjs)));

    filename_elmt := xmldom.createElement(doc, 'FILENAME'); --創(chuàng)建filename元素
    --向filename節(jié)點加入子節(jié)點filename
    filename_node := xmldom.appendChild(person_node,xmlDom.makeNode(filename_elmt));
    --向filename節(jié)點加入文本
    temp_node := xmldom.appendChild(filename_node, xmlDom.makeNode(xmldom.createTextNode(doc,v_filename)));

    --寫入硬盤
    xmldom.setVersion(doc, '1.0 ');
    xmlDom.writeToFile(doc,file_path,'GBK');
    EXCEPTION
    WHEN OTHERS THEN
    ROLLBACK;
    end CJXML;
    為何報invalid char in text   回復  更多評論
      
    # re: 【原創(chuàng)】編寫Oracle存儲過程,按照條件把數(shù)據(jù)導出至XML文件 2009-03-22 22:42 | ljjhxyljj
    這個例子是不是不能在oracle8i中通過?  回復  更多評論
      
    主站蜘蛛池模板: 亚洲AV无码一区二区二三区软件 | 国产极品粉嫩泬免费观看 | 四虎影院永久免费观看| 亚洲heyzo专区无码综合| 182tv免费视视频线路一二三| 亚洲成在人线av| 欧洲人成在线免费| 一区二区三区亚洲| 1000部国产成人免费视频| 亚洲午夜久久久精品电影院| 91青青国产在线观看免费| 亚洲精品白色在线发布| 在线看免费观看AV深夜影院| 国产亚洲精aa在线看| 思思99re66在线精品免费观看| 亚洲精品蜜夜内射| 啊v在线免费观看| 国产精品小视频免费无限app| 亚洲日韩精品无码一区二区三区| 国产一级a毛一级a看免费视频| 亚洲AV无码国产精品麻豆天美 | 久久美女网站免费| 亚洲精品在线播放视频| 毛片高清视频在线看免费观看| 久久精品国产亚洲AV电影网| 国产偷窥女洗浴在线观看亚洲| 久久久国产精品福利免费| 国产成人精品日本亚洲18图| 免费v片视频在线观看视频| 日韩电影免费在线观看网站| 久久狠狠高潮亚洲精品| 日韩电影免费在线观看视频| 精品无码国产污污污免费网站国产 | 久久久久久亚洲精品影院| 五月婷婷亚洲综合| 无码日韩精品一区二区三区免费| 99999久久久久久亚洲| 久久久久亚洲爆乳少妇无| 精品免费久久久久久久| 免费国产a理论片| 亚洲日韩乱码中文无码蜜桃|