sql >> Databasteknik >  >> RDS >> Oracle

När XML-data laddas visas ett felmeddelande som säger att min kontrollfil refererar till ett icke-existerande fält

Du verkar blanda ihop några sätt att göra detta på. Felet beror på att den försöker tolka "test_file.xml" inuti LOBFILE() som fältreferens.

Om du vet att du bara kommer att ladda ett XML-dokument från en enda textfil kan du skapa din kontrollfil:

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 sektionen har en rad med ett utfyllnadstecken för varje XML-dokument i filen, och eftersom det bara finns ett, finns det ett enda utfyllnadsmedel.

Notera CONSTANT vilket gör att den letar efter en fil som heter det, inte ett fält. Loggfilen visar det statiska namnet:

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.

För att använda ett fält skulle du ha en datafil med filnamnet, låt oss kalla den test_loading.dat för att matcha kontrollfilens namn, som innehåller:

test_file.xml

Och en kontrollfil som använder den som INFILE, och innehållet i dess första fält som filnamn:

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

Den här gången visar loggfilen att namnet hämtas dynamiskt:

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.

Läs mer i dokumentationen .

Båda kommer att fungera för dig. Eftersom du bara har en enda fil i ditt exempel kan den första versionen vara något enklare, men om du ska ladda flera filer (med en tabellrad per fil) är den andra versionen mer användbar.




  1. En anslutning upprättades med servern, men sedan uppstod ett fel under handskakningen före inloggningen

  2. 11 sätt att hämta en primärnyckel i SQL Server (T-SQL-exempel)

  3. mysql-replikering - master till slav

  4. omvänd mysql_real_escape_string