1

Oracle 是否提供 XML 格式文件的标准化上传?我认为用于 XML 输出的规范格式 structure =ROWSET/ROW/columname可以通过运行带有适当控制文件内容的 sqlldr 再次上传回表中。
但是我在网络上的任何地方都找不到任何关于此的信息,并且试验后的错误消息似乎表明只能将 XML 上传到 XML 类型格式的表格中,我只想在普通表格中上传数据但提供数据以 XML 格式。

4

2 回答 2

1

不,SQL*Loader 只能处理“平面”文件。

一种选择是编写一个 XSLT 转换,将ROWSET/ROW/column格式转换为文本文件,然后将其导入目标表。

另一种选择是将 XML 导入单行,然后使用 Oracle 的 XML 函数从该临时表中选择一个关系结果并将其插入到实际表中。

于 2012-08-31T07:54:29.340 回答
1

没有标准化的选项,但使用这种特定格式,您可以做到。如果你有一张桌子:

CREATE TABLE test_tab (
    id NUMBER,
    text VARCHAR2(50)
);

以及您在test_tab.xml文件中的记录:

<ROWSET>
<ROW>
<ID>1</ID>
<TEXT>This is some text</TEXT>
</ROW>
<ROW>
<ID>2</ID>
<TEXT>This is some more text</TEXT>
</ROW>
<ROW>
<ID>3</ID>
<TEXT>This is some other text</TEXT>
</ROW>
<ROW>
<ID>4</ID>
<TEXT>This is also some text</TEXT>
</ROW>
</ROWSET>

和一个控制文件test_tab.ctl

LOAD DATA
INFILE 'test_tab.xml'
CONCATENATE 4
INTO TABLE test_tab
(
    dummy FILLER CHAR(15) TERMINATED BY "<ROW>",
    id CHAR(10) ENCLOSED BY "<ID>" AND "</ID>",
    text CHAR(40) ENCLOSED BY "<TEXT>" AND "</TEXT>"
)

你可以做:

sqlldr usr/pwd control=test_tab.ctl

Commit point reached - logical record count 4

SELECT * FROM test_tab;

        ID TEXT
---------- --------------------------------------------------
         1 This is some text
         2 This is some more text
         3 This is some other text
         4 This is also some text

你也可以从同一个文件创建一个外部表,如果你把目录放在 Oracle 可以看到的目录中:

CREATE TABLE test_tab (
    id NUMBER,
    text VARCHAR2(50)
)
ORGANIZATION EXTERNAL
(
    TYPE ORACLE_LOADER
    DEFAULT DIRECTORY some_dir
    ACCESS PARAMETERS
    (
        RECORDS DELIMITED BY "</ROW>"
        FIELDS
        (
            dummy CHAR(15) TERMINATED BY "<ROW>",
            id CHAR(10) ENCLOSED BY "<ID>" AND "</ID>",
            text CHAR(40) ENCLOSED BY "<TEXT>" AND "</TEXT>"
        )
    )
    LOCATION ('test_tab.xml')
)
PARALLEL
REJECT LIMIT UNLIMITED;

Table created.

SELECT * FROM test_tab;

    ID TEXT
---------- --------------------------------------------------
     1 This is some text
     2 This is some more text
     3 This is some other text
     4 This is also some text
于 2012-08-31T20:49:34.470 回答