仿照網上的一個過程函數改編,但是我的數據庫了因為有date類型,所以,改成了如下:create or replace procedure xml2tblbasewpnlcut(dir     varchar2,
                                               inpfile varchar2) is
  -- 參數說明:
  -- dir      基本目錄,如 'd:\xml\plsql'
  -- inpfile  輸入檔案名,不含路徑,如 'people.xml'
  -- errfile  錯誤日誌檔,保存解析錯誤資訊, 如 'err.log'
  p   xmlparser.parser;
  doc xmldom.DOMDocument;
  -- 讀取並處理文檔元素
  procedure readElements(doc xmldom.DOMDocument) is
    nl  xmldom.DOMNodeList;
    len number;
    n   xmldom.DOMNode;
    -- attn   xmldom.DOMNode;
    -- nnm    xmldom.DOMNamedNodeMap;
    nl2    xmldom.DOMNodeList;
    len2   number;
    strSQL varchar2(1000);
  begin
    
    nl  := xmldom.getElementsByTagName(doc, 'TBLENGBASEWPNLCUT');
    len := xmldom.getLength(nl);
    -- 遍曆元素
    for i in 0 .. len - 1 loop
      -- 構造動態 SQL 語句
      strSQL := 'INSERT INTO TBLENGBASEWPNLCUT VALUES (';
      --n      := xmldom.item(nl, i);
      /*   if xmldom.getNodeName(n)='book' then
         nnm := xmldom.getAttributes(n);  
         attn := xmldom.item(nnm, 0);
         strSQL := strSQL || '''' || xmldom.getNodeValue(attn) || '''';
      end if; */
      -- 讀取 PERSON 的子節點
      nl2  := xmldom.getChildNodes(n);
      len2 := xmldom.getLength(nl2);
      -- 處理 NAME, ADDRESS, ... 等節點
      n      := xmldom.item(nl2, 0);
      strSQL := strSQL || '''' ||
                xmldom.getNodeValue(xmldom.getFirstChild(n)) || '''';      for j in 1 .. len2 - 5 loop
        n      := xmldom.item(nl2, j);
        strSQL := strSQL || ', ''' ||
                  xmldom.getNodeValue(xmldom.getFirstChild(n)) || '''';
      end loop;      n      := xmldom.item(nl2, len2 - 4);
      strSQL := strSQL || ', ''' ||
                to_data(xmldom.getNodeValue(xmldom.getFirstChild(n)),
                        'YYYY/MM/DD HH24:MI:SS') || '''';      n      := xmldom.item(nl2, len2 - 3);
      strSQL := strSQL || ', ''' ||
                xmldom.getNodeValue(xmldom.getFirstChild(n)) || '''';      n      := xmldom.item(nl2, len2 - 2);
      strSQL := strSQL || ', ''' ||
                to_data(xmldom.getNodeValue(xmldom.getFirstChild(n)),
                        'YYYY/MM/DD HH24:MI:SS') || '''';      n      := xmldom.item(nl2, len2 - 1);
      strSQL := strSQL || ', ''' ||
                xmldom.getNodeValue(xmldom.getFirstChild(n)) || '''';      -- 完成 動態 SQL 語句的構造
      strSQL := strSQL || ')';
      -- dbms_output.put_line(strSQL);
      -- 執行插入記錄的 SQL 語句
      execute immediate (strSQL); -- 執行動態 SQL
    end loop;
    commit; -- 提交插入
    dbms_output.put_line('');
  end readElements;
begin
  -- 新建解析器實例
  p := xmlparser.newParser;
  -- 設置解析器特性
  xmlparser.setValidationMode(p, FALSE);
  --   xmlparser.setErrorLog(p, dir || '\' || errfile);
  xmlparser.setBaseDir(p, dir);
  -- 解析輸入檔
  xmlparser.parse(p, dir || '\' || inpfile);
  -- 獲取解析後的文檔對象
  doc := xmlparser.getDocument(p);
  -- 讀取文檔元素
  dbms_output.put_line('讀取文檔元素並保存到表 TBLENGBASEWPNLCUT 中.');
  readElements(doc);
  -- 釋放資源
  xmldom.freeDocument(doc);
end xml2tblbasewpnlcut;編譯的時候都能夠編譯,但是執行確是無效的。究竟錯在哪里呢?不知道哪位知道原因,謝謝!!
另:xml文檔如下:
<?xml version="1.0" encoding="utf-16"?>
<!-- edited with XMLSpy v2008 rel. 2 sp1 (http://www.altova.com) by wanghui (tj) -->
<ROWDATA>
<TBLENGBASEWPNLCUT>
<WPNLLENGTH>622.000</WPNLLENGTH>
<WPNLWIDE>518.000</WPNLWIDE>
<SHITLENGTH>49</SHITLENGTH>
<SHITWIDE>41</SHITWIDE>
<LAMCUTID>1</LAMCUTID>
<BACKYN>N</BACKYN>
<CUTFILENAME>C14_JUDY.BMP</CUTFILENAME>
<CREATOR>071801</CREATOR>
<CREATEDATE>2008-07-18 10:32:18</CREATEDATE>
<REVISER>071801</REVISER>
<REVISEDATE>2008-07-18 10:33:08</REVISEDATE>
<MEMO/>
</TBLENGBASEWPNLCUT>
<TBLENGBASEWPNLCUT>
<WPNLLENGTH>600.000</WPNLLENGTH>
<WPNLWIDE>500.000</WPNLWIDE>
<SHITLENGTH>49</SHITLENGTH>
<SHITWIDE>41</SHITWIDE>
<LAMCUTID>1</LAMCUTID>
<BACKYN>N</BACKYN>
<CUTFILENAME>C14_JUDY.BMP</CUTFILENAME>
<CREATOR>071801</CREATOR>
<CREATEDATE>2008-07-18 10:32:18</CREATEDATE>
<REVISER>071801</REVISER>
<REVISEDATE>2008-07-18 10:33:08</REVISEDATE>
<MEMO/>
</TBLENGBASEWPNLCUT>
</ROWDATA>