`
weiwu83
  • 浏览: 191416 次
  • 来自: ...
社区版块
存档分类
最新评论

一个ORACLE导入和导出XML文件的例子

阅读更多

导入:
/*****************************************************************************
过程名称:add_to_stockmarket
参数1:fileName in varchar2 接收用户输入的xml文件名
功能:将xml文件中的数据导入到Stockmarket数据表中
*****************************************************************************/
create or replace procedure add_to_stockmarket(fileName IN varchar2) as
document xmldom.DOMDocument;--声明文档对象模型
subelement xmldom.DOMElement;--声明元素类型
nodelistStock xmldom.DOMNodeList;
nodelistStockChild xmldom.DOMNodeList;
stock_code char(6);--stock字段
stock_name varchar2(30);--stockname字段
stock_shortname varchar(30);--stockshortname字段
stock_buydate date;--stockbuydate字段
recordCountOuter number;--存储xml文档中stock元素的个数
quantity exception;
begin

document:=xmlparser.parse(fileName);--解析xml文档
subelement:=xmldom.getDocumentElement(document);--获得根元素
nodelistStock:=xmldom.getElementsByTagName(subelement,'Stock');
recordCountOuter:=xmldom.getLength(nodelistStock);
for outerCycle in 0..recordCountOuter-1 loop--循环记录信息
nodelistStockChild:=xmldom.getChildNodes(xmldom.item(nodelistStock,outerCycle));
if xmldom.getLength(nodelistStockChild)<>4 then
raise quantity;
end if;
stock_code:=xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(nodelistStockChild,0)));
stock_name:=xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(nodelistStockChild,1)));
stock_shortname:=xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(nodelistStockChild,2)));
stock_buydate:=to_date(xmldom.getNodeValue(xmldom.getFirstChild(xmldom.item(nodelistStockChild,3))),'yyyy-fmMM-fmDD HH24:MI:SS');
insert into stockmarket values(stock_code,stock_name,stock_shortname,stock_buydate);
end loop;
commit;
exception
when quantity then
raise_application_error(-20010,'请核对该xml文档与数据库表Stockmarket的结构是否一致,'
||chr(10)||'若仍不能解决问题,请与系统管理员联系!');
end;

导出:
/************************************************************************************************************
存储过程名称:up_exptoxml
参数1:XMLfilepath in varchar2 接收将要生成的文件名(可带路径)
参数2:sqlQuery in varchar2 接收用户输入的查询字符串,默认值为:"select * from stockmarket"
参数3:flag in varchar2 标志位,说明第二个参数的来源(即由用户输入还是来自于文件)默认值:
"sql",即由用户输入
使用方法:
1、默认方式:exec up_exptoxml(xmlfilepath) //将stockmarket表中的数据全部取出
保存到参数xmlfilepath指定的文件中
2、用户指定查询语句方式:
//将用户指定的查询语句所生成的结果集保存到参数xmlfilepath所指定的文件中
1)exec up_exptoxml(xmlfilepath,'select stockname,buydate from stockmarket')

//如果用户认为查询语句过长,直接输入不方便,也可以将语句保存成*.txt文件,
//存储过程执行方式如下:
2)exec up_exptoxml(xmlfilepath,'filepath,filename','file');
该方式下存储过程将指定目录,指定文件中的sql语句读出并执行,将所生成的结果集保存到参数xmlfilepath
所指定的文件中
功能:按照用户要求将查询结果保存为xml文件
************************************************************************************************************/
create or replace procedure up_exptoxml(XMLfilepath in varchar2, sqlQuery varchar2:='select * from stockmarket',flag varchar2:='sql') is
sqlstr_from_file clob;--保存sql查询字符串
document xmldom.DOMDocument;--文档对象
rootelement xmldom.DOMElement;--根元素
stockRecord xmldom.DOMElement;--记录
stockfield xmldom.DOMElement;--字段
l_cursor integer;--存储游标变量返回值
l_col_cot integer;--游标所包含的列数
l_desc_tab dbms_sql.desc_tab;--定义desc_tab类型的集合
tempfield dbms_sql.Varchar2_Table;--定义Varchar2_Table类型的集合
tempdate dbms_sql.Date_Table;--定义Date_Table类型的集合
tempnode xmldom.DOMNode;--定义临时节点
text xmldom.DOMText;--定义文本节点
executenum integer;--存储游标执行返回值
--fieldvalue varchar2(50);
sqlfile utl_file.file_type;
parameter exception;--自定义异常
begin
if upper(flag)<>'SQL'and upper(flag)<>'FILE' then
raise parameter;--如果flag参数不为上述两个选项,则抛出参数异常
elsif upper(flag)='SQL' then
sqlstr_from_file:=sqlQuery;
else
--调用存储过程以读取文件中存放的sql查询字符串
readFile(sqlQuery,sqlstr_from_file);
end if;
l_cursor:=dbms_sql.open_cursor;
dbms_sql.parse(l_cursor,sqlstr_from_file,dbms_sql.native);--解析游标

dbms_sql.describe_columns(l_cursor,l_col_cot,l_desc_tab);--获取列描述信息
for def in 1..l_col_cot loop
if l_desc_tab(def).col_type=1 then
tempfield(def):='';--初始化集合元素
dbms_sql.define_column(l_cursor,def,tempfield(def),50);--定义列
else
tempdate(def):=sysdate;--初始化集合元素
dbms_sql.define_column(l_cursor,def,tempdate(def));--定义列
end if;
end loop;
executenum:=dbms_sql.execute(l_cursor);--执行游标

document:=xmldom.newDOMDocument;--生成文档对象
rootelement:=xmldom.createElement(document,'StockTable');--生成根元素
loop--循环结果集(列方向)
if dbms_sql.fetch_rows(l_cursor)>0 then
stockrecord:=xmldom.createElement(document,'Stock');--建立临时记录元素
for i in 1..l_col_cot loop--(循环列,行方向)
stockfield:=xmldom.createElement(document,l_desc_tab(i).col_name);--建立字段元素
if l_desc_tab(i).col_type=1 then--col_type=1 表示varchar2类型
--dbms_sql.define_column(l_cursor,i,tempfield(i),50);
dbms_sql.column_value(l_cursor,i,tempfield(i));
text:=xmldom.createTextNode(document,tempfield(i));
else --col_type=12 表示date类型
--dbms_sql.define_column(l_cursor,i,tempdate(i));
dbms_sql.column_value(l_cursor,i,tempdate(i));
text:=xmldom.createTextNode(document,to_char(tempdate(i),'yyyy-mm-dd HH24:MI:SS'));
end if;
--将文本节点添加到字段节点
tempnode:=xmldom.appendChild(xmldom.makeNode(stockfield),xmldom.makeNode(text));
--将字段节点添加到记录节点
tempnode:=xmldom.appendChild(xmldom.makeNode(stockrecord),xmldom.makeNode(stockfield));
end loop;
--将记录节点添加到根节点
tempnode:=xmldom.appendChild(xmldom.makeNode(rootelement),xmldom.makeNode(stockrecord));
else
--no more row to copy
dbms_sql.close_cursor(l_cursor);--遍历游标结束,关闭游标
exit;
end if;
end loop;
--将根节点添加到文档
tempnode:=xmldom.appendChild(xmldom.makeNode(document),xmldom.makeNode(rootelement));
xmldom.setVersion(document,'1.0');
xmldom.writeToFile(document,XMLfilepath);
exception
when parameter then
raise_application_error(-20004,'必须以"sql"或者"file"方式指定sql语句的来源');
when others then
if dbms_sql.is_open(l_cursor) then
dbms_sql.close_cursor(l_cursor);
end if;
raise_application_error(-20005,'未知异常,游标已关闭!');
end up_exptoxml;

分享到:
评论

相关推荐

    Oracle导入导出xml[借鉴].pdf

    总之,Oracle提供了一套强大的XML支持,允许用户方便地导入和导出XML数据。通过使用XML解析器和DOM模型,开发人员能够有效地处理XML文件,将其转换为关系型数据存储在数据库中,或者将数据库中的数据导出为XML格式,...

    各种数据库导出XML导入oracle方式.doc

    在IT行业中,数据库管理和数据...总之,从各种数据库导出XML并导入到Oracle,需要对XML的结构有深入理解,并熟悉各个数据库系统的数据导入工具和语法。通过正确配置和适当优化,可以有效地完成跨数据库的数据迁移任务。

    ORACLE_XML.rar_oracle

    其中包含的"一个ORACLE导入和导出XML文件的例子.txt"是一个示例文件,很可能提供了关于如何在Oracle数据库中导入和导出XML数据的步骤和技巧。 Oracle数据库提供了强大的XML支持,包括XML类型、XMLTable、XMLIndex等...

    Oracle表数据和xml文件间相互导入导出的PL.pdf

    在Oracle数据库环境中,将...通过理解XML的结构以及如何在PL/SQL中操作这些结构,可以有效地实现Oracle表和XML文件之间的数据导入导出。这在集成不同系统,尤其是那些使用XML作为数据交换格式的系统时,显得尤为重要。

    导入导出例子

    这个压缩包文件“导入导出例子.NET”提供了一些现成的代码示例,帮助开发者快速实现这一功能。下面我们将深入探讨.NET中如何进行数据的导入与导出。 1. **CSV导入导出**: CSV(Comma Separated Values)是一种...

    Java实现XML导入不同数据库,从数据库导出数据到XML

    以下是一个基本的JDOM解析XML文件的例子: ```java import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.input.SAXBuilder; // 创建SAXBuilder实例 SAXBuilder builder = new SAXBuilder(); /...

    北大青鸟Oracle项目实战

    本示例代码为我们提供了一个关于如何使用Oracle数据库处理XML文档的实际例子。通过学习这些知识点,开发者可以更好地理解和掌握如何利用Oracle数据库的强大功能来处理和操作XML数据,从而提高开发效率并实现更复杂的...

    XML数据转换

    4. **PPT**:提到的PPT可能是一个关于XML数据转换的演示文稿,通常会包含以下内容:XML的基础概念,Oracle数据库对XML的支持,如何在Oracle中存储和查询XML数据,使用XMLType的例子,以及使用DBMS_XMLGEN和DBMS_XML...

    odbc例子程序,支持unicode,xml方式调用

    通过XML接口,用户可以以XML文件的形式导入或导出数据,这对于数据的调试和跨平台传递非常有用。 具体到压缩包中的"Meta_Interface",这可能是指元数据接口。元数据是关于数据的数据,比如数据库表的结构信息(列名...

    strutsspringhibernate连接oracle例子

    xh.dmp文件可能是一个Oracle数据库的导出文件,用于恢复或导入数据。 "说明.txt"文件很可能是详细的操作指南,包括了如何搭建环境、配置各框架、导入数据库、运行示例应用等步骤。这部分内容是理解整个示例的关键,...

    C#操作sqlce数据导入导出示例

    总之,C#结合SQL CE和EPPlus库,为开发人员提供了强大且灵活的数据操作能力,能够满足从简单到复杂的数据导入导出需求。通过熟练掌握这些技术,可以提高开发效率,提升软件的用户体验。在实际工作中,根据具体需求,...

    以XML文件的形式备份数据库中的表

    在这个例子中,我们看到一个名为"以XML文件的形式备份数据库中的表.exe"的文件,这可能是一个执行这个过程的实用程序,它将导出、压缩并在一个步骤中完成整个备份流程。 4. **存储和版本控制**:备份的XML文件应该...

    Xml.rar_java xml_xml_xml 数据库_xml数据库

    本文将深入探讨如何使用Java与XML进行交互,特别是在连接数据库和将数据库内容导出为XML格式文件的场景下。 首先,我们需要了解Java中的XML处理技术。主要有DOM(Document Object Model)、SAX(Simple API for XML...

    xml解析中文笔记.docx

    DOM解析器会将整个XML文档加载到内存中,并创建一个`Document`对象,便于后续操作。 - **优点**:保持了XML文档中元素间的结构关系,便于数据查询和操作。 - **缺点**:对于大型文档来说可能导致内存溢出,效率较...

    PostgreSQL 8.2,Oracle 10g,SQL Server 2005,MYSQL 5.1 脚本例子

    在提供的"Oracle_10g.txt"文件中,可能包含了针对Oracle 10g数据库的特定脚本,如创建表、索引、用户权限设置、数据导入导出、触发器和存储过程等。通过这些脚本,开发者或管理员可以学习如何在Oracle环境中执行常见...

    weblogic8.1配置部署文档

    在Oracle数据库管理中,使用`imp`命令进行数据导入,这里是导入命令的一个例子: ``` Imp account/account@orcl fromuser=bainian touser=account file=bainian.dmp ``` 这条命令表示使用`account`账户登录,...

    struts2框架写的增删查改完整例子

    6. **数据库配置**:提供的`.dmp`文件可能是Oracle数据库的导出文件,用户需要将其导入自己的数据库环境,并根据实际情况修改连接配置,如数据库名和密码,以使程序能正确连接到数据库。 7. **Demo02**:这个文件...

    使用ant执行sql脚本重建oracle数据库

    描述中提到的`mysql2oracle`可能指的是一个转换工具或者过程,用于将MySQL数据库的数据和结构转换为Oracle兼容的格式。这个过程可能涉及到数据类型映射、SQL语法调整以及可能的数据库设计变更。在进行这样的转换时,...

Global site tag (gtag.js) - Google Analytics