如何从oracle中读取XML文件?

时间:2009-08-18 05:49:48

标签: oracle

我需要将XML文件作为输入参数传递给存储过程。该过程将读取XML文件并将数据插入表中。

如何在存储过程中执行读取的XML文件?示例代码或参考链接赞赏。

提前致谢

2 个答案:

答案 0 :(得分:1)

您可以让oracle过程获取XML参数并使用sql来提取信息。如果您传递多行并希望oracle将它们分解并一次处理一行,则可能会遇到性能损失。我发现使用调用程序来提取xml并对每条记录一遍又一遍地调用存储过程就更快了。下面是关于XML参数和提取的示例:

PROCEDURE ProcedureName(xml_i IN XMLTYPE)

选择   DISTINCT EXTRACT(VALUE(level1),'// column_name1 / text()')。getNumberVal()AS column_name1          ,EXTRACT(VALUE(level1),'// PathPart1 / text()')。getNumberVal()as column_name2          ,EXTRACT(VALUE(level1),'// PathPart1 / text()')。getStringVal()AS column_name3          ,Constants.no_c       FROM xml_doc_l          ,TABLE(XMLSequence(EXTRACT(X.xml_doc,'/ path3')))level1;

我提取并将数据插入到我用于处理的全局临时表中。处理完成后,我会做一个提交,它会自动清空临时表。我用这个过程每小时处理150k sql语句。

您需要对提取程序进行更多研究并阅读oracle的示例。跟进有些麻烦。如果您从一个非常简单的示例开始,它将帮助您最终确定解决方案。

答案 1 :(得分:0)

您始终可以将XML作为VarChar参数传递给存储过程 - 它只是一个长字符串。

但问问自己:您是否真的想传递长字符串并解析数据库上的XML侧?存储过程旨在检索和操作数据,而不是解析复杂的XML。此外,您只是使调试过程变得复杂。我建议在应用程序端(Web,客户端)解析XML并将解析后的数据发送到存储过程。