xml文件:
<?xml version="1.0" encoding="gbk"?>
<TRS>
<REC>
<INFO_ID>1</INFO_ID><br/><br/>
<作者>未知</作者><br/><br/>
<修改日期>未知</修改日期><br/><br/>
<分类>杂志</分类><br/><br/>
<发表日期>2009</发表日期><br/><br/>
<字数>100</字数><br/><br/>
<录入员>王艳娜</录入员><br/><br/>
<录入日期>2010.10.19</录入日期><br/><br/>
<日期>2009</日期><br/><br/>
<来源>炎黄春秋杂志</来源><br/><br/>
<标题>新年致读者</标题><br/><br/>
<正文>在新年将至的时候,许多作者和读者来电来信,询问杂志社的情况和今年的编辑方针,借此机会,我们向大家汇报一下我们的情况和法.</正文><br/><br/>
<正文字数>88</正文字数><br/><br/>
<状态>优良</状态><br/><br/>
</REC></TRS>---从网上找到的存储过程
CREATE OR REPLACE PROCEDURE addPerson(file_path VARCHAR2,log_path VARCHAR2)
AS
--//XML解析器
xmlPar XMLPARSER.parser := XMLPARSER.NEWPARSER;
--//DOM文档对象
doc xmldom.DOMDocument;
len integer;
personNodes xmldom.DOMNodeList;
chilNodes xmldom.DOMNodeList;
tempNode xmldom.DOMNode;
tempArrMap xmldom.DOMNamedNodeMap;
--================================
--以下变量用于获取XML节点的值
"日期" char(20);
"分类" char(150);
"标题" char(2000);
"正文" varchar2(4000);
"字数" char(20);
"正文字数" char(20);
"录入日期" char(20);
"录入员" char(20);
"修改日期" char(20);
"INFO_ID" char(10);
"状态" char(50);
"发表日期" char(50);
"来源" char(50);
"作者" char(50)
--================================
BEGIN
xmlPar := xmlparser.newParser;
xmlparser.setErrorLog( xmlPar, log_path);
xmlparser.parse(xmlPar, file_path);
doc := xmlparser.getDocument( xmlPar );
-- 释放解析器实例
xmlparser.freeParser(xmlPar);
-- 获取所有PERSON元素
personNodes := xmldom.getElementsByTagName( doc,'REC');
len := xmldom.getLength( personNodes );
--遍历所有PERSON元素
FOR i in 0..len-1
LOOP
--获取第i个PERSON
tempNode := xmldom.item( personNodes, i );
--所有属性
tempArrMap := xmldom.getAttributes(tempNode);
--获取PERSONID的值
pid := xmldom.getNodeValue(xmldom.getNamedItem(tempArrMap,'INFO_ID'));
--获取所有子节点
chilNodes := xmldom.getChildNodes(tempNode);
--获取子节点的个数
tmp := xmldom.GETLENGTH( chilNodes );
--获取各个子节点的值
作者 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 0 )));
修改日期 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 1 )));
分类 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 2 )));
发表日期 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 3 )));
字数 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 4 )));
录入员 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 5 )));
录入日期 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 6 )));
日期 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 7 )));
来源 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 8 )));
标题 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 9 )));
正文 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 10 )));
正文字数 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 11 )));
状态 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 12 )));
--插入数据
INSERT INTO PEOPLE VALUES (INFO_ID,作者,修改日期,分类,发表日期,字数,录入员,录入日期,日期,来源,标题,正文,正文字数,状态);
COMMIT;
END LOOP;
-- 释放文档对象
xmldom.freeDocument(doc);
EXCEPTION
WHEN OTHERS THEN
DBMS_output.PUT_LINE(SQLERRM);
END addPerson;
自己修改完后,在PLSQL里执行总是提示“警告: 创建的过程带有编译错误。”问题可能比较长,谢谢各位大大们帮忙了!!!!
<?xml version="1.0" encoding="gbk"?>
<TRS>
<REC>
<INFO_ID>1</INFO_ID><br/><br/>
<作者>未知</作者><br/><br/>
<修改日期>未知</修改日期><br/><br/>
<分类>杂志</分类><br/><br/>
<发表日期>2009</发表日期><br/><br/>
<字数>100</字数><br/><br/>
<录入员>王艳娜</录入员><br/><br/>
<录入日期>2010.10.19</录入日期><br/><br/>
<日期>2009</日期><br/><br/>
<来源>炎黄春秋杂志</来源><br/><br/>
<标题>新年致读者</标题><br/><br/>
<正文>在新年将至的时候,许多作者和读者来电来信,询问杂志社的情况和今年的编辑方针,借此机会,我们向大家汇报一下我们的情况和法.</正文><br/><br/>
<正文字数>88</正文字数><br/><br/>
<状态>优良</状态><br/><br/>
</REC></TRS>---从网上找到的存储过程
CREATE OR REPLACE PROCEDURE addPerson(file_path VARCHAR2,log_path VARCHAR2)
AS
--//XML解析器
xmlPar XMLPARSER.parser := XMLPARSER.NEWPARSER;
--//DOM文档对象
doc xmldom.DOMDocument;
len integer;
personNodes xmldom.DOMNodeList;
chilNodes xmldom.DOMNodeList;
tempNode xmldom.DOMNode;
tempArrMap xmldom.DOMNamedNodeMap;
--================================
--以下变量用于获取XML节点的值
"日期" char(20);
"分类" char(150);
"标题" char(2000);
"正文" varchar2(4000);
"字数" char(20);
"正文字数" char(20);
"录入日期" char(20);
"录入员" char(20);
"修改日期" char(20);
"INFO_ID" char(10);
"状态" char(50);
"发表日期" char(50);
"来源" char(50);
"作者" char(50)
--================================
BEGIN
xmlPar := xmlparser.newParser;
xmlparser.setErrorLog( xmlPar, log_path);
xmlparser.parse(xmlPar, file_path);
doc := xmlparser.getDocument( xmlPar );
-- 释放解析器实例
xmlparser.freeParser(xmlPar);
-- 获取所有PERSON元素
personNodes := xmldom.getElementsByTagName( doc,'REC');
len := xmldom.getLength( personNodes );
--遍历所有PERSON元素
FOR i in 0..len-1
LOOP
--获取第i个PERSON
tempNode := xmldom.item( personNodes, i );
--所有属性
tempArrMap := xmldom.getAttributes(tempNode);
--获取PERSONID的值
pid := xmldom.getNodeValue(xmldom.getNamedItem(tempArrMap,'INFO_ID'));
--获取所有子节点
chilNodes := xmldom.getChildNodes(tempNode);
--获取子节点的个数
tmp := xmldom.GETLENGTH( chilNodes );
--获取各个子节点的值
作者 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 0 )));
修改日期 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 1 )));
分类 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 2 )));
发表日期 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 3 )));
字数 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 4 )));
录入员 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 5 )));
录入日期 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 6 )));
日期 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 7 )));
来源 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 8 )));
标题 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 9 )));
正文 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 10 )));
正文字数 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 11 )));
状态 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 12 )));
--插入数据
INSERT INTO PEOPLE VALUES (INFO_ID,作者,修改日期,分类,发表日期,字数,录入员,录入日期,日期,来源,标题,正文,正文字数,状态);
COMMIT;
END LOOP;
-- 释放文档对象
xmldom.freeDocument(doc);
EXCEPTION
WHEN OTHERS THEN
DBMS_output.PUT_LINE(SQLERRM);
END addPerson;
自己修改完后,在PLSQL里执行总是提示“警告: 创建的过程带有编译错误。”问题可能比较长,谢谢各位大大们帮忙了!!!!
解决方案 »
- 请帮忙看一下这个存储过程为什么不能执行?
- “oracle”用户没有启动lisener的权限?
- 查询ORACLE的CPU占用率、内存的使用量
- 如何立即刷新一个实体化视图?
- 问题解决在给300分
- 这样的SQL语句在存储过程如何执行??
- oracle导出数据库只导出表结构,但是有一个表要导出数据的命令
- update set (f1,f2) = (select f1, f2 from table2 ) 如何匹配更新?
- 求助:ORA-22990 LOB定位器无法扩展事物处理( 内详 )
- oracle 在存储过程里如何获得当前存储过程执行的上一个DML语句
- 执行完存储过程后执行SQL语句(SELECT)
- 初学orcale,关于版本的请教。
<?xml version="1.0" encoding="gbk"?>
<TRS>
<REC>
<INFO_ID>1</INFO_ID><br/><br/>
<作者>未知</作者><br/><br/>
<修改日期>未知</修改日期><br/><br/>
<分类>杂志</分类><br/><br/>
<发表日期>2009</发表日期><br/><br/>
<字数>100</字数><br/><br/>
<录入员>王艳娜</录入员><br/><br/>
<录入日期>2010.10.19</录入日期><br/><br/>
<日期>2009</日期><br/><br/>
<来源>炎黄春秋杂志</来源><br/><br/>
<标题>新年致读者</标题><br/><br/>
<正文>在新年将至的时候,许多作者和读者来电来信,询问杂志社的情况和今年的编辑方针,借此机会,我们向大家汇报一下我们的情况和法.</正文><br/><br/>
<正文字数>88</正文字数><br/><br/>
<状态>优良</状态><br/><br/>
</REC></TRS>
CREATE OR REPLACE PROCEDURE addPerson(file_path VARCHAR2,log_path VARCHAR2)
AS
--//XML解析器
xmlPar XMLPARSER.parser := XMLPARSER.NEWPARSER;
--//DOM文档对象
doc xmldom.DOMDocument;
len integer;
personNodes xmldom.DOMNodeList;
chilNodes xmldom.DOMNodeList;
tempNode xmldom.DOMNode;
tempArrMap xmldom.DOMNamedNodeMap;
--================================
--以下变量用于获取XML节点的值
"日期" char(20);
"分类" char(150);
"标题" char(2000);
"正文" varchar2(4000);
"字数" char(20);
"正文字数" char(20);
"录入日期" char(20);
"录入员" char(20);
"修改日期" char(20);
"INFO_ID" char(10);
"状态" char(50);
"发表日期" char(50);
"来源" char(50);
"作者" char(50)
--================================
BEGIN
xmlPar := xmlparser.newParser;
xmlparser.setErrorLog( xmlPar, log_path);
xmlparser.parse(xmlPar, file_path);
doc := xmlparser.getDocument( xmlPar );
-- 释放解析器实例
xmlparser.freeParser(xmlPar);
-- 获取所有PERSON元素
personNodes := xmldom.getElementsByTagName( doc,'REC');
len := xmldom.getLength( personNodes );
--遍历所有PERSON元素
FOR i in 0..len-1
LOOP
--获取第i个PERSON
tempNode := xmldom.item( personNodes, i );
--所有属性
tempArrMap := xmldom.getAttributes(tempNode);
--获取PERSONID的值
pid := xmldom.getNodeValue(xmldom.getNamedItem(tempArrMap,'INFO_ID'));
--获取所有子节点
chilNodes := xmldom.getChildNodes(tempNode);
--获取子节点的个数
tmp := xmldom.GETLENGTH( chilNodes );
--获取各个子节点的值
作者 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 0 )));
修改日期 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 1 )));
分类 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 2 )));
发表日期 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 3 )));
字数 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 4 )));
录入员 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 5 )));
录入日期 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 6 )));
日期 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 7 )));
来源 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 8 )));
标题 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 9 )));
正文 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 10 )));
正文字数 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 11 )));
状态 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 12 )));
--插入数据
INSERT INTO PEOPLE VALUES (INFO_ID,作者,修改日期,分类,发表日期,字数,录入员,录入日期,日期,来源,标题,正文,正文字数,状态);
COMMIT;
END LOOP;
-- 释放文档对象
xmldom.freeDocument(doc);
EXCEPTION
WHEN OTHERS THEN
DBMS_output.PUT_LINE(SQLERRM);
END addPerson;
AS
--//XML解析器
.....
....."来源" char(50);
"作者" char(50); --逗号结束!
--================================
BEGIN
xmlPar := xmlparser.newParser;
xmlparser.setErrorLog( xmlPar, log_path);
xmlparser.parse(xmlPar, file_path);
doc := xmlparser.getDocument( xmlPar );
-- 释放解析器实例
xmlparser.freeParser(xmlPar);
-- 获取所有PERSON元素
personNodes := xmldom.getElementsByTagName( doc,'REC');
len := xmldom.getLength( personNodes );
--遍历所有PERSON元素
FOR i in 0..len-1
LOOP
--获取第i个PERSON
tempNode := xmldom.item( personNodes, i );
--所有属性
tempArrMap := xmldom.getAttributes(tempNode);
--获取PERSONID的值
pid := xmldom.getNodeValue(xmldom.getNamedItem(tempArrMap,'INFO_ID')); --pid必须申明变量
--获取所有子节点
chilNodes := xmldom.getChildNodes(tempNode);
--获取子节点的个数
tmp := xmldom.GETLENGTH( chilNodes ); --tmp也必须申明为变量
--获取各个子节点的值
.......
.......
--就我说的那三个地方改了就好了,编译能通过!---从网上找到的存储过程
CREATE OR REPLACE PROCEDURE addPerson(file_path VARCHAR2,log_path VARCHAR2)
AS
--//XML解析器
xmlPar XMLPARSER.parser := XMLPARSER.NEWPARSER;
--//DOM文档对象
doc xmldom.DOMDocument;
len integer;
personNodes xmldom.DOMNodeList;
chilNodes xmldom.DOMNodeList;
tempNode xmldom.DOMNode;
tempArrMap xmldom.DOMNamedNodeMap;
--================================
--以下变量用于获取XML节点的值
"日期" char(20);
"分类" char(150);
"标题" char(2000);
"正文" varchar2(4000);
"字数" char(20);
"正文字数" char(20);
"录入日期" char(20);
"录入员" char(20);
"修改日期" char(20);
"INFO_ID" char(10);
"状态" char(50);
"发表日期" char(50);
"来源" char(50);
"作者" char(50); --(1)逗号结束!
pid VARCHAR2(100); --(2)申明变量pid
tmp VARCHAR2(100); --(3)申明变量tmp
--================================
BEGIN
xmlPar := xmlparser.newParser;
xmlparser.setErrorLog( xmlPar, log_path);
xmlparser.parse(xmlPar, file_path);
doc := xmlparser.getDocument( xmlPar );
-- 释放解析器实例
xmlparser.freeParser(xmlPar);
-- 获取所有PERSON元素
personNodes := xmldom.getElementsByTagName( doc,'REC');
len := xmldom.getLength( personNodes );
--遍历所有PERSON元素
FOR i in 0..len-1
LOOP
--获取第i个PERSON
tempNode := xmldom.item( personNodes, i );
--所有属性
tempArrMap := xmldom.getAttributes(tempNode);
--获取PERSONID的值
pid := xmldom.getNodeValue(xmldom.getNamedItem(tempArrMap,'INFO_ID')); --pid必须申明变量
--获取所有子节点
chilNodes := xmldom.getChildNodes(tempNode);
--获取子节点的个数
tmp := xmldom.GETLENGTH( chilNodes ); --tmp也必须申明为变量
--获取各个子节点的值
作者 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 0 )));
修改日期 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 1 )));
分类 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 2 )));
发表日期 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 3 )));
字数 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 4 )));
录入员 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 5 )));
录入日期 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 6 )));
日期 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 7 )));
来源 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 8 )));
标题 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 9 )));
正文 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 10 )));
正文字数 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 11 )));
状态 := xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item( chilNodes, 12 )));
--插入数据
INSERT INTO PEOPLE VALUES (INFO_ID,作者,修改日期,分类,发表日期,字数,录入员,录入日期,日期,来源,标题,正文,正文字数,状态);
COMMIT;
END LOOP;
-- 释放文档对象
xmldom.freeDocument(doc);
EXCEPTION
WHEN OTHERS THEN
DBMS_output.PUT_LINE(SQLERRM);
END addPerson;
这句可能有问题,看看表结构是否能对应上,建议写成
insert into table1 (col1, col2) values ('val1','val2');这种形式。
我测试的时候是把你这个语句屏蔽了的,所以编译通过了
你指定插入栏位试试:
你INSERT INTO PEOPLE(。。)values( ......)
这是建表语句:create table test
(
"rowid" char(20),
"日期" char(20) default '' not null ,
"分类" char(150) default '' not null ,
"标题" char(2000) default '' not null ,
"正文" varchar2(4000) default '' not null ,
"字数" char(20) default '' not null ,
"正文字数" char(20) default '' not null ,
"录入日期" char(20) default '' not null ,
"录入员" char(20) default '' not null ,
"修改日期" char(20) default '' not null ,
"INFO_ID" char(10) default '' not null,
"状态" char(50) default '' not null,
"发表日期" char(50) default '' not null,
"来源" char(50) default '' not null,
"作者" char(50) default '' not null
)
哪位大大帮帮忙能不能帮忙测试一下!!谢谢!!!
最后一个)貌似你是中文下的??