sql >> Database >  >> RDS >> Oracle

Het laden van XML-gegevens krijgt een foutmelding dat mijn controlebestand verwijst naar een niet-bestaand veld

Je lijkt een paar manieren om dit te doen door elkaar te halen. De fout is omdat het de "test_file.xml" . probeert te interpreteren binnen LOBFILE() als veldreferentie.

Als u weet dat u slechts één XML-document uit een enkel tekstbestand zult laden, kunt u uw controlebestand maken:

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

De BEGINDATA sectie heeft een rij met een opvulteken voor elk XML-document in het bestand, en aangezien er maar één is, is er een enkele opvuller.

Let op de CONSTANT waardoor het zoekt naar een bestand met de naam dat, niet een veld. Het logbestand toont die statische naam:

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.

Om een ​​veld te gebruiken zou je een gegevensbestand hebben met de bestandsnaam, laten we het test_loading.dat noemen om overeen te komen met de naam van het controlebestand, die het volgende bevat:

test_file.xml

En een controlebestand dat dat als INFILE gebruikt en de inhoud van het eerste veld als bestandsnaam:

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

Deze keer toont het logbestand dat de naam dynamisch wordt opgehaald:

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.

Lees meer in de documentatie .

Ofwel zal voor u werken. Omdat je in je voorbeeld maar één bestand hebt, is de eerste versie misschien iets eenvoudiger, maar als je meerdere bestanden gaat laden (met een tabelrij per bestand), is de tweede versie handiger.




  1. MongoDB geaggregeerde query's versus MySQL SELECT field1 FROM tabel

  2. randomiseren van grote dataset

  3. Ms Access Db verbinden met Mysql via Vba

  4. Wat is uw mening over het gebruik van tekstuele identifiers in tabelkolommen bij het benaderen van de database met normalisatie en schaalbaarheid in gedachten?