oracle9.0.1可以解析XML吗? 我的数据库是Oracle9.0.1.1.1的版本,从网上下的解析XML一个例子,编译时报错:pls-00201:必须说明标识符'xmlParser',以及'xmldom',是不是9.0.1.1.1不支持啊!如果不支持这两个包,有什么办法在这个版本中解析XML,请高人指教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我现在也正在做一个把xml文件的内容导入oracle数据库中去,具体内容如下:我建了一个xml文件如下:放在“C:\xml”下:名称为people.xml <?xml version="1.0"?> <PEOPLE> <PERSON PERSONID="E01"> <NAME>Tony Blair </NAME> <ADDRESS>10 Downing Street, London, UK </ADDRESS> <TEL>(061) 98765 </TEL> <FAX>(061) 98768 </FAX> <EMAIL>[email protected] </EMAIL> </PERSON> <PERSON PERSONID="E02"> <NAME>Bill Clinton </NAME> <ADDRESS>White House, USA </ADDRESS> <TEL>(001) 6400 98765 </TEL> <FAX>(001) 6400 98769 </FAX> <EMAIL>[email protected] </EMAIL> </PERSON> <PERSON PERSONID="E03"> <NAME>Tom Cruise </NAME> <ADDRESS>57 Jumbo Street, New York, USA </ADDRESS> <TEL>(001) 4500 67859 </TEL> <FAX>(001) 4500 67895 </FAX> <EMAIL>[email protected] </EMAIL> </PERSON> <PERSON PERSONID="E04"> <NAME>Linda Goodman </NAME> <ADDRESS>78 Crax Lane, London, UK </ADDRESS> <TEL>(061) 54 56789 </TEL> <FAX>(061) 54 56772 </FAX> <EMAIL>[email protected] </EMAIL> </PERSON> </PEOPLE> 在数据库中建表: CREATE TABLE PEOPLE ( PERSONID VARCHAR2(10) PRIMARY KEY, NAME VARCHAR2(20), ADDRESS VARCHAR2(60), TEL VARCHAR2(20), FAX VARCHAR2(20), EMAIL VARCHAR2(40) ); 我将xml文件导入数据库的代码如下: create or replace procedure xml2table(dir varchar2, inpfile varchar2, errfile 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 -- 讀取 PERSON 元素 nl := xmldom.getElementsByTagName(doc, 'PERSON'); len := xmldom.getLength(nl); -- 遍曆元素 for i in 0..len-1 loop -- 構造動態 SQL 語句 strSQL := 'INSERT INTO PEOPLE VALUES ('; n := xmldom.item(nl, i); if xmldom.getNodeName(n)='PERSON' then nnm := xmldom.getAttributes(n); -- 讀取 PERSONID 屬性 attn := xmldom.item(nnm, 0); strSQL := strSQL ¦ ¦ '''' ¦ ¦ xmldom.getNodeValue(attn) ¦ ¦ ''''; end if; -- 讀取 PERSON 的子節點 nl2 := xmldom.getChildNodes(n); len2 := xmldom.getLength(nl2); -- 處理 NAME, ADDRESS, ... 等節點 for j in 0..len2-1 loop n := xmldom.item(nl2, j); strSQL := strSQL ¦ ¦ ', ''' ¦ ¦ xmldom.getNodeValue(xmldom.getFirstChild(n)) ¦ ¦ ''''; end loop; -- 完成 動態 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('讀取文檔元素並保存到表 PEOPLE 中.'); readElements(doc); -- 釋放資源 xmldom.freeDocument(doc); end xml2table; 运行时老是提示:ora-20100: error occurred while parsing: no such file or directory.还有ora-06512等错误。 我在网上找了原因,可能是因为我的文件放在自己的电脑上,而我的oracle数据库放在服务器上,我又不能登陆服务器,真不知道该如何解决这个问题。 郁闷中....我用的就是Oracle Provider for OLE DB 9.0.1.0.1希望搂主能有启发,也希望我能够很快实现导入数据库。 $ORACLE_HOME/xdk下面应该有相关包你的版本我不太清楚,也许是$ORACLE_HOME\xdk\admin\xmldomi.sql,--xmldom$ORACLE_HOME\xdk\admin\xmlload.sql,--xmlParser 根据条件分组 count(*) 没有记录 希望结果是0 用nvl也无用 空的 怎么写呢 请教MSCS环境下的OFS配置问题 触发器的问题 sqlldr的问题? 如何获取数据库表 的 列名 来帮帮忙 oracle 的几个小问题 希望各位能够帮我 解决 谢谢了 谁有Redhat Enterprise Linux AS2.1(其他版本也可以)下oracle9i集群配置文档(中英文都可以) ORACLE 有没有 SQL SERVER 里的 “应用程序角色“,或者相同的解决方法??? 表的外键问题,请帮忙!!!高分,在线等待!!! 如何做交叉表. Oracle导入数据库出错,请进!!
<?xml version="1.0"?>
<PEOPLE>
<PERSON PERSONID="E01">
<NAME>Tony Blair </NAME>
<ADDRESS>10 Downing Street, London, UK </ADDRESS>
<TEL>(061) 98765 </TEL> <FAX>(061) 98768 </FAX>
<EMAIL>[email protected] </EMAIL>
</PERSON>
<PERSON PERSONID="E02">
<NAME>Bill Clinton </NAME>
<ADDRESS>White House, USA </ADDRESS>
<TEL>(001) 6400 98765 </TEL> <FAX>(001) 6400 98769 </FAX>
<EMAIL>[email protected] </EMAIL>
</PERSON>
<PERSON PERSONID="E03">
<NAME>Tom Cruise </NAME>
<ADDRESS>57 Jumbo Street, New York, USA </ADDRESS>
<TEL>(001) 4500 67859 </TEL> <FAX>(001) 4500 67895 </FAX>
<EMAIL>[email protected] </EMAIL>
</PERSON>
<PERSON PERSONID="E04">
<NAME>Linda Goodman </NAME>
<ADDRESS>78 Crax Lane, London, UK </ADDRESS>
<TEL>(061) 54 56789 </TEL> <FAX>(061) 54 56772 </FAX>
<EMAIL>[email protected] </EMAIL>
</PERSON>
</PEOPLE> 在数据库中建表:
CREATE TABLE PEOPLE
(
PERSONID VARCHAR2(10) PRIMARY KEY,
NAME VARCHAR2(20),
ADDRESS VARCHAR2(60),
TEL VARCHAR2(20),
FAX VARCHAR2(20),
EMAIL VARCHAR2(40)
); 我将xml文件导入数据库的代码如下:
create or replace procedure xml2table(dir varchar2, inpfile varchar2,
errfile 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
-- 讀取 PERSON 元素
nl := xmldom.getElementsByTagName(doc, 'PERSON');
len := xmldom.getLength(nl);
-- 遍曆元素
for i in 0..len-1 loop
-- 構造動態 SQL 語句
strSQL := 'INSERT INTO PEOPLE VALUES (';
n := xmldom.item(nl, i);
if xmldom.getNodeName(n)='PERSON' then
nnm := xmldom.getAttributes(n); -- 讀取 PERSONID 屬性
attn := xmldom.item(nnm, 0);
strSQL := strSQL ¦ ¦ '''' ¦ ¦ xmldom.getNodeValue(attn) ¦ ¦ '''';
end if;
-- 讀取 PERSON 的子節點
nl2 := xmldom.getChildNodes(n);
len2 := xmldom.getLength(nl2);
-- 處理 NAME, ADDRESS, ... 等節點
for j in 0..len2-1 loop
n := xmldom.item(nl2, j);
strSQL := strSQL ¦ ¦ ', ''' ¦ ¦ xmldom.getNodeValue(xmldom.getFirstChild(n)) ¦ ¦ '''';
end loop;
-- 完成 動態 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('讀取文檔元素並保存到表 PEOPLE 中.');
readElements(doc);
-- 釋放資源
xmldom.freeDocument(doc);
end xml2table; 运行时老是提示:ora-20100: error occurred while parsing: no such file or directory.还有ora-06512等错误。 我在网上找了原因,可能是因为我的文件放在自己的电脑上,而我的oracle数据库放在服务器上,我又不能登陆服务器,真不知道该如何解决这个问题。 郁闷中....我用的就是Oracle Provider for OLE DB 9.0.1.0.1
希望搂主能有启发,也希望我能够很快实现导入数据库。
$ORACLE_HOME\xdk\admin\xmldomi.sql,--xmldom
$ORACLE_HOME\xdk\admin\xmlload.sql,--xmlParser