插入数据库,捕捉主键重复错误?create directory test as 'd:\test';  --把emp.xml 放到这个目录里
grant write ,read on directory test to martin;employee.xml文件的内容如下:
<?xml version="1.0" encoding="gb2312" ?>
<employees>
<employee>
<empid>e0001</empid>
<name>萧峰</name>
</employee>
<employee>
<empid>e0002</empid>
<name>段誉</name>
</employee>
<employee>
<empid>e0003</empid>
<name>王语嫣</name>
</employee>
<employee>
<empid>e0003</empid>
<name>张无忌</name>

</employee>
</employees>
 
drop table people2
create table people2 

    personid varchar2(10  primary key ,
    name varchar2(20) 
 ); 
 
 alter table people2
 add constraint P_ID primary key (personid);create or replace procedure xml2table(dir     varchar2,
                                      inpfile varchar2 ) is
  p   xmlparser.parser;
  doc xmldom.domdocument;
  procedure readelements(doc xmldom.domdocument) is  --转到表的子过程
    nl     xmldom.domnodelist;
    len    number;
    n      xmldom.domnode;
    nl2    xmldom.domnodelist;
    len2   number;
    strsql varchar2(1000);
  begin
    nl  := xmldom.getelementsbytagname(doc, 'employee');
    len := xmldom.getlength(nl);
    for i in 0 .. len - 1 loop
      strsql := 'insert into people2 values (';
      n      := xmldom.item(nl, i);
      nl2  := xmldom.getchildnodes(n);
     len2 := xmldom.getlength(nl2);
     --这个地方想半天: 规律是这样的. (字段+逗号  字段+逗号) 循环,但是第一个字段不能呀 
      for j in 0 .. len2 - 1 loop  
        n      := xmldom.item(nl2, j);
         strSQL := strSQL || '''' || xmldom.getNodeValue(xmldom.getFirstChild(n)) || ''|| ''',';
      end loop;  
      strsql:=substr(strsql,0,length(strsql)-1);  --少了一个L 害死我了.应该 细心编程.小心调试啊, 
     -- select substr(strsql,0,mun) into strsql from dual;
      strsql := strsql || ')';
      dbms_output.put_line(strsql); 
      execute immediate (strsql);    
    end loop;
    commit;
    dbms_output.put_line('');
  end readelements;
begin
  p := xmlparser.newparser;
  xmlparser.setvalidationmode(p, false);
  xmlparser.setbasedir(p, dir); 
  xmlparser.parse(p, dir ||'\' ||inpfile); 
  doc := xmlparser.getdocument(p);
  xmlparser.freeparser(p);
  dbms_output.put_line('存到表 people2 中.');
  readelements(doc);
  xmldom.freedocument(doc);
end xml2table;begin
  xml2table('TEST', 'employee.xml');
end;select *from people2;