<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 );

    假設表里面已經有數據,如果想從XML插入數據請看【原創】編寫Oracle存儲過程解析XML,并把數據持久化

    以下是把查詢結果生成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;        -- 創建文檔對象
    12     main_node xmlDom.DOMNode := xmldom.makeNode(doc);       -- 獲得文檔節點
    13     root_elmt xmlDom.DOMElement:= xmldom.createElement(doc, 'PEOPLE');   -- 創建根元素
    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     --以下定義節點
    23     root_node xmlDom.DOMNode;   --定義PEOPLE節點
    24     person_node xmlDom.DOMNode;   --定義PERSON節點
    25     name_node xmlDom.DOMNode;   --定義NAME節點
    26     address_node xmlDom.DOMNode;   --定義ADDRESS節點
    27     tel_node xmlDom.DOMNode;   --定義TEL節點
    28     email_node xmlDom.DOMNode;   --定義EMAIL節點
    29     temp_node xmlDom.DOMNode;
    30 BEGIN
    31     -- 向文檔節點加入根節點:<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'); --創建PERSON元素
    43       -- 向PEOPLE節點加入PERSON節點<PERSON></PERSON>
    44       person_node := xmldom.appendChild(root_node, xmldom.makeNode(person_elmt));
    45       --===========================================================================--
    46       --向PERSON節點加入屬性PERSONID
    47       xmlDom.SETATTRIBUTE( person_elmt, 'PERSONID', personRow.personId );
    48       --===========================================================================--
    49       name_elmt := xmldom.createElement(doc, 'NAME');      --創建NAME元素
    50       --向PERSON節點加入子節點NAME
    51       name_node := xmldom.appendChild(person_node,xmlDom.makeNode(name_elmt));
    52       --向NAME節點加入文本
    53       temp_node := xmldom.appendChild(name_node , xmlDom.makeNode(xmldom.createTextNode(doc,personRow.name)));
    54       --===========================================================================--
    55       address_elmt := xmldom.createElement(doc, 'ADDRESS');      --創建ADDRESS元素
    56       --向PERSON節點加入子節點ADDRESS
    57       address_node := xmldom.appendChild(person_node,xmlDom.makeNode(address_elmt));
    58       --向ADDRESS節點加入文本
    59       temp_node := xmldom.appendChild(address_node, xmlDom.makeNode(xmldom.createTextNode(doc,personRow.address)));
    60       --===========================================================================--
    61       tel_elmt := xmldom.createElement(doc, 'TEL');      --創建TEL元素    
    62       --向TEL節點加入子節點NAME
    63       tel_node := xmldom.appendChild(person_node,xmlDom.makeNode(tel_elmt));
    64       --向TEL節點加入文本
    65       temp_node := xmldom.appendChild(tel_node, xmlDom.makeNode(xmldom.createTextNode(doc,personRow.tel)));
    66       --===========================================================================--
    67       email_elmt := xmldom.createElement(doc, 'EMAIL');      --創建EMAIL元素    
    68       --向PERSON節點加入子節點EMAIL
    69       email_node := xmldom.appendChild(person_node,xmlDom.makeNode(email_elmt));
    70       --向EMAIL節點加入文本
    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 閱讀(3059) 評論(3)  編輯  收藏 所屬分類: Oracle

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

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

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

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

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

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

    filename_elmt := xmldom.createElement(doc, 'FILENAME'); --創建filename元素
    --向filename節點加入子節點filename
    filename_node := xmldom.appendChild(person_node,xmlDom.makeNode(filename_elmt));
    --向filename節點加入文本
    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: 【原創】編寫Oracle存儲過程,按照條件把數據導出至XML文件 2009-03-22 22:42 | ljjhxyljj
    這個例子是不是不能在oracle8i中通過?  回復  更多評論
      
    主站蜘蛛池模板: 99re6在线精品免费观看| 夜夜爽妓女8888视频免费观看| 亚洲AV日韩AV永久无码绿巨人| 亚洲精品日韩中文字幕久久久| 无码色偷偷亚洲国内自拍| 最近免费中文字幕视频高清在线看| 亚洲国产婷婷综合在线精品| 无码天堂亚洲国产AV| 免费jlzzjlzz在线播放视频| 在线精品自拍亚洲第一区| 国产精成人品日日拍夜夜免费| 最近中文字幕无吗免费高清 | 成人毛片18岁女人毛片免费看| 亚洲高清最新av网站| 日本特黄特色AAA大片免费| 亚洲成在人线在线播放无码| 免费观看的a级毛片的网站| 无码专区—VA亚洲V天堂| 特级毛片aaaa免费观看| 亚洲最大av无码网址| 久久国产乱子精品免费女| 四虎永久免费观看| 久久国产亚洲高清观看| 色婷婷综合缴情综免费观看| 国产成人亚洲精品91专区手机| 亚洲日韩看片无码电影| 亚洲Av无码国产情品久久| 国产午夜精品理论片免费观看| 啊v在线免费观看| 伊人免费在线观看| 亚洲日本在线观看视频| 嫩草影院在线播放www免费观看| 亚洲v国产v天堂a无码久久| 中文字幕的电影免费网站| 国产一区在线观看免费| 成人电影在线免费观看| 亚洲另类精品xxxx人妖| 亚洲国产高清精品线久久| 一区二区三区四区免费视频| 久久久久亚洲精品影视| 免费在线看污视频|