sql >> Databáze >  >> RDS >> Oracle

Při načítání dat XML se zobrazí chyba, že můj kontrolní soubor odkazuje na neexistující pole

Zdá se, že pletete několik způsobů, jak toho dosáhnout. Chyba je způsobena tím, že se pokouší interpretovat "test_file.xml" uvnitř LOBFILE() jako odkaz na pole.

Pokud víte, že načtete pouze jeden dokument XML z jednoho textového souboru, můžete vytvořit svůj kontrolní soubor:

LOAD DATA
INFILE *
append INTO TABLE TEST_XML
XMLType(XMLDATA)
FIELDS
(
    FILL FILLER CHAR(1),
    XMLDATA LOBFILE(CONSTANT test_file.xml) TERMINATED BY EOF
)
BEGINDATA
0

BEGINDATA sekce má řádek s výplňovým znakem pro každý dokument XML v souboru, a protože je pouze jeden, je zde jedna výplň.

Všimněte si CONSTANT což způsobí, že hledá soubor nazvaný takto, nikoli pole. Soubor protokolu zobrazuje tento statický název:

Table TEST_XML, loaded from every logical record.
Insert option in effect for this table: APPEND

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
FILL                                FIRST     1           CHARACTER
  (FILLER FIELD)
XMLDATA                           DERIVED     *  EOF      CHARACTER
    Static LOBFILE.  Filename is test_file.xml


Table TEST_XML:
  1 Row successfully loaded.
  0 Rows not loaded due to data errors.
  0 Rows not loaded because all WHEN clauses were failed.
  0 Rows not loaded because all fields were null.

Chcete-li použít pole, měli byste mít datový soubor s názvem souboru, nazvěme jej test_loading.dat aby odpovídal názvu kontrolního souboru, který obsahuje:

test_file.xml

A kontrolní soubor, který to používá jako INFILE a obsah jeho prvního pole jako název souboru:

LOAD DATA
INFILE test_loading.dat
append INTO TABLE TEST_XML
XMLType(XMLDATA)
FIELDS
(
    filename FILLER CHAR(30),
    XMLDATA LOBFILE(filename) TERMINATED BY EOF
)

Tentokrát soubor protokolu ukazuje, že název je načítán dynamicky:

Table TEST_XML, loaded from every logical record.
Insert option in effect for this table: APPEND

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
FILENAME                            FIRST    30           CHARACTER
  (FILLER FIELD)
XMLDATA                           DERIVED     *  EOF      CHARACTER
    Dynamic LOBFILE.  Filename in field FILENAME


Table TEST_XML:
  1 Row successfully loaded.
  0 Rows not loaded due to data errors.
  0 Rows not loaded because all WHEN clauses were failed.
  0 Rows not loaded because all fields were null.

Další informace naleznete v dokumentaci .

Obojí vám bude fungovat. Protože ve svém příkladu máte pouze jeden soubor, první verze může být o něco jednodušší, ale pokud budete načítat více souborů (s řádkem tabulky na soubor), je užitečnější druhá verze.




  1. Chybí artefakt com.microsoft.sqlserver:sqljdbc4:jar:4.0

  2. Dotaz MySQL pro výběr výsledků s automatickým přírůstkem jako nový sloupec přidaný do výsledku

  3. více dotazů MySQL na jeden insert

  4. kde podmínka od varchar odděleného čárkou v mysql a codeigniter