1

Oracleは、XML形式のファイルの標準化されたアップロードを提供していますか?適切な制御ファイルの内容でsqlldrを実行するだけで、XML出力に使用される標準形式(structure = ROWSET/ROW/columname)をテーブルに再度アップロードできると思いました。
しかし、これについてはWebのどこにも見つかりません。試行後のエラーメッセージは、XMLをXMLタイプの形式のテーブルにアップロードすることしかできないことを示しているようです。ここでは、プレーンテーブルにデータをアップロードするだけで、データを提供します。 XML形式で。

4

2 に答える 2

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 に答える
1

いいえ、SQL*Loader は「フラット」ファイルのみを処理できます。

1 つのオプションは、形式をテキスト ファイルに変換する XSLT 変換を記述し、ROWSET/ROW/columnそれをターゲット テーブルにインポートすることです。

もう 1 つのオプションは、XML を 1 つの行にインポートしてから、Oracle の XML 関数を使用してそのステージング テーブルからリレーショナル結果を選択し、それを実際のテーブルに挿入することです。

于 2012-08-31T07:54:29.340 に答える