如何将 xml 文件从 Internet 直接导入 Oracle 表

Posted

技术标签:

【中文标题】如何将 xml 文件从 Internet 直接导入 Oracle 表【英文标题】:How to import xml file from Internet directly to Oracle table 【发布时间】:2019-09-14 12:08:29 【问题描述】:

我希望我的 Oracle 直接从 Internet 获取一个 xml 文件并将其插入到表中(在此线程中可以省略解析)。

示例:https://cve.mitre.org/data/downloads/allitems-cvrf-year-1999.xml

    <Vulnerability
        xmlns="http://www.icasi.org/CVRF/schema/vuln/1.1" Ordinal="1">
        <Title>CVE-1999-0001</Title>
        <Notes>
            <Note Type="Description" Ordinal="1">ip_input.c in BSD-derived TCP/IP implementations allows remote attackers to cause a denial of service (crash or hang) via crafted packets.</Note>
            <Note Type="Other" Title="Published" Ordinal="2">2000-02-04</Note>
            <Note Type="Other" Title="Modified" Ordinal="3">2005-12-16</Note>
        </Notes>
        <CVE>CVE-1999-0001</CVE>
        <References>
            <Reference>
                <URL/>
                <Description>BUGTRAQ:19981223 Re: CERT Advisory CA-98.13 - TCP/IP Denial of Service</Description>
            </Reference>
            <Reference>
                <URL/>
                <Description>CERT:CA-98-13-tcp-denial-of-service</Description>
            </Reference>
            <Reference>
                <URL>http://www.openbsd.org/errata23.html#tcpfix</URL>
                <Description>CONFIRM:http://www.openbsd.org/errata23.html#tcpfix</Description>
            </Reference>
            <Reference>
                <URL>http://www.osvdb.org/5707</URL>
                <Description>OSVDB:5707</Description>
            </Reference>
        </References>
    </Vulnerability> *REPEAT*

首先我创建一个表:

CREATE TABLE XML_TABLE
   (    ID NUMBER, 
    XML_DATA XMLTYPE
);

然后我想(如果可能)在表中为每个新漏洞(xml 中漏洞标记之间的所有内容)插入一个新行。

要获取数据,我可以使用以下命令(不确定它是否最适合此目的):

host curl https://cve.mitre.org/data/downloads/allitems-cvrf-year-1999.xml

问题是存储它。

【问题讨论】:

【参考方案1】:

您可以使用 UTL_HTTP 包从 Internet 和您的数据库中获取数据。

这里是文档Database PL/SQL Packages and Types Reference UTL_HTTP

这里有一个例子Oracle base UTL_HTTP的解释

如果您在 DB 版本 >=11 上运行,请按照说明了解 ACL。

您可以选择编写您的 java 过程和 PL/SQL 包装器(正如我所做的那样)以与 Web 服务交互并返回一个 Clob。

Take a look here

【讨论】:

感谢您的评论。我已经挣扎了一天没有让 HTTPS 工作。我经常收到 ORA-28759:无法打开文件。有很多线程...只需要耐心找到正确的线程:-) 在您的最后一个链接中,我在尝试编译函数帖子时遇到错误。是不是因为有一些我不知道的先决条件? 我基本上按照您发布的Link 的示例提供的说明进行操作。我已经将 ACL 配置为 these instrcutions 在 sqlnet.ora 文件中我添加了这个: ENCRYPTION_WALLET_LOCATION= (SOURCE=(METHOD=FILE) (METHOD_DATA= (DIRECTORY=C:\Users[USERNAME]\AppData\Local\Temp ))) 这也是我的钱包所在的地方。我已授予对钱包文件的权限并添加了用户 ORA_DBA。 尝试将钱包移动到文件系统上的另一个位置(例如 c:\wallet),如here所述

以上是关于如何将 xml 文件从 Internet 直接导入 Oracle 表的主要内容,如果未能解决你的问题,请参考以下文章

如何从数据库表中生成xml文件?

如何使用 Delphi 将数据从 XML 导入 PDF 表单?

怎样将xml批量导入excel

将数据从 XML 文件导入 SQL 数据库

如何使用 Java 直接从 Internet 读取文本文件?

如何通过xml文件导入时将图像连接到magento