我需要将XML文件作为输入参数传递给存储过程。该过程将读取XML文件并将数据插入表中。
如何在存储过程中执行读取的XML文件?示例代码或参考链接赞赏。
提前致谢
答案 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并将解析后的数据发送到存储过程。